HDU 3342--拓扑排序
http://acm.hdu.edu.cn/showproblem.php?pid=3342
拓扑排序的水题,利用拓扑排序判环。
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 #define maxn 1005 5 int g[1005][1005]; 6 int top,vis[maxn],rudu[maxn],n; 7 void topo() 8 { 9 int i; 10 for(i=0;i<n;i++) 11 { 12 if(!rudu[i]&&!vis[i]) 13 { 14 vis[i]=1; 15 top=i; 16 break; 17 } 18 } 19 for(i=0;i<n;i++) 20 { 21 if(g[top][i]) 22 rudu[i]--; 23 } 24 } 25 int main() 26 { 27 int m,a,b,i; 28 while(cin>>n>>m,n||m) 29 { 30 memset(rudu,0,sizeof(rudu)); 31 memset(g,0,sizeof(g)); 32 memset(vis,0,sizeof(vis)); 33 while(m--) 34 { 35 cin>>a>>b; 36 if(!g[a][b]) 37 rudu[b]++; 38 g[a][b]=1; 39 } 40 for(i=0;i<n;i++) 41 { 42 top=1001; 43 topo(); 44 if(top==1001) 45 break; 46 } 47 if(i>=n) 48 puts("YES"); 49 else 50 puts("NO"); 51 } 52 return 0; 53 }
posted on 2013-02-04 20:10 acoderworld 阅读(62) 评论(0) 收藏 举报
浙公网安备 33010602011771号