1 条题解
-
0
C++ :
#include <stdio.h> #include <string.h> #include <vector> #include <algorithm> using namespace std; vector<int> edge[105]; int dp[105][105]; int main() { int i,j,n,m,x,y,k; while(scanf("%d%d",&n,&m)!=EOF) { for (i=0;i<n;i++) { edge[i].clear(); } for (i=0;i<m;i++) { scanf("%d%d",&x,&y); x--;y--; edge[min(x,y)].push_back(max(x,y)); } memset(dp,-1,sizeof(dp)); dp[0][0]=1; for (i=0;i<n;i++) { for (j=0;j<n;j++) { if (dp[i][j]==-1) continue; if (i<=j) { for (k=0;k<edge[i].size();k++) { int e=edge[i][k]; if (e==j && e!=n-1) continue; dp[e][j]=max(dp[e][j],dp[i][j]+1); } } else { for (k=0;k<edge[j].size();k++) { int e=edge[j][k]; if (e==i && e!=n-1) continue; dp[i][e]=max(dp[i][e],dp[i][j]+1); } } } } if (dp[n-1][n-1]==-1) printf("1\n"); else printf("%d\n",dp[n-1][n-1]-1); } return 0; }
- 1
信息
- ID
- 976
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者