HDU3342--Legal or Not


 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 #include<stack>
 8 #include<cstdlib>
 9 #include<vector>
10 using namespace std;
11 
12 int n,m;
13 int in[101];
14 vector<int>ve[101];
15 queue<int>Q;
16 
17 void init()
18 {
19     memset(in,0,sizeof(in));
20     for(int i=0;i<n;i++)
21     {
22         ve[i].clear();
23     }
24 }
25 
26 int main()
27 {
28     while(~scanf("%d%d",&n,&m))
29     {
30         if(!n&&!m)break;
31         init();
32         for(int i=0;i<m;i++)
33         {
34             int u,v;
35             scanf("%d%d",&u,&v);
36             ve[u].push_back(v);
37             in[v]++;
38         }
39         for(int i=0;i<n;i++)
40         {
41             if(in[i]==0)
42                 Q.push(i);
43         }
44         int num=0;
45         int add[101];
46         while(!Q.empty())
47         {
48             int t=Q.front();
49             Q.pop();
50             add[num++]=t;
51             while(!ve[t].empty())
52             {
53                 if(--in[ve[t].back()]==0)
54                 {
55                     Q.push(ve[t].back());
56                 }
57                 ve[t].pop_back();
58             }
59         }
60         if(num==n)printf("YES\n");
61         else
62             printf("NO\n");
63     }
64     return 0;
65 }

 

 

posted on 2013-06-13 10:54  张狂不年轻°  阅读(135)  评论(0编辑  收藏  举报