1 solutions
-
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
Information
- ID
- 19291
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- (None)
- # Submissions
- 0
- Accepted
- 0
- Uploaded By