Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=1285

拓扑排序 小心重边

View Code
 1 #include <cstdio>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 const int N=510;
 6 int g[N][N],ind[N],n;
 7 int topo[N];
 8 bool toposort()
 9 {
10     for(int i=1;i<=n;i++)
11     {
12         int u;
13         for(u=1;u<=n;u++)
14             if(ind[u]==0) break;
15         if(u>n) return false;
16         topo[i]=u; ind[u]--;
17         for(int v=1;v<=n;v++)
18             if(g[u][v]) ind[v]--;
19     }
20     return true;
21 }
22 int main()
23 {
24     int m;
25     while(~scanf("%d%d",&n,&m))
26     {
27         memset(g,0,sizeof(g));
28         memset(ind,0,sizeof(ind));
29         for(int i=0;i<m;i++)
30         {
31             int u,v;
32             scanf("%d%d",&u,&v);
33             if(g[u][v]) continue;
34             g[u][v]=1;
35             ind[v]++;
36         }
37         toposort();
38         for(int i=1;i<n;i++) printf("%d ",topo[i]);
39         printf("%d\n",topo[n]);
40     }
41     return 0;
42 }

 

posted on 2012-04-29 10:54  Qiuqiqiu  阅读(137)  评论(0编辑  收藏  举报