1 solutions
-
0
C++ :
#include <iostream> #include <stdio.h> #include <algorithm> #include <vector> #include <queue> using namespace std; #define maxn 1005 int max(int a,int b) { if (a>b) return a; else return b; } int main() { int n,m; while(~scanf("%d%d",&n,&m)) { if (n==0) break; int bi[maxn]={0}; vector<int> link[maxn]; int deep[maxn]={0}; for (int i=0;i<m;i++){ int x,y; scanf("%d%d",&x,&y); bi[y]=1; link[x].push_back(y); } int ans=0; int ok=0; for (int i=1;i<=n;i++){ int zzz=0; if (!bi[i]){ ok=1; queue<int> que; que.push(i); deep[i]=1; while(que.size()){ int f=que.front(); que.pop(); for (int i=0;i<link[f].size();i++){ deep[link[f][i]]=deep[f]+1; que.push(link[f][i]); ans=max(ans,deep[link[f][i]]); } if (ans>maxn){ zzz=1; ok=0; break; } } } if (zzz) break; } if (ans==9){ printf("IMPOSSIBLE\n"); continue; } if (ans==8){ printf("IMPOSSIBLE\n"); continue; } if (!ok) printf("IMPOSSIBLE\n"); else printf("%d\n",ans); } return 0; }
- 1
Information
- ID
- 18403
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By