标签:
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #include<queue> 5 #include<vector> 6 7 using namespace std; 8 9 const int maxn=505; 10 11 struct Node 12 { 13 int v; 14 bool operator < (const Node &a) const 15 { 16 return a.v<v; 17 } 18 }; 19 20 vector<int>node[maxn]; 21 int f[maxn]; 22 int inde[maxn]; 23 24 int tot; 25 26 void topo(int n) 27 { 28 tot=1; 29 30 priority_queue<Node>que; 31 while(!que.empty()) 32 que.pop(); 33 34 for(int i=1;i<=n;i++) 35 { 36 if(inde[i]==0) 37 { 38 Node temp; 39 temp.v=i; 40 que.push(temp); 41 } 42 } 43 44 while(!que.empty()) 45 { 46 Node u=que.top(); 47 que.pop(); 48 f[tot++]=u.v; 49 50 for(int i=0;i!=node[u.v].size();i++) 51 { 52 int w=node[u.v][i]; 53 inde[w]--; 54 if(inde[w]==0) 55 { 56 Node temp; 57 temp.v=w; 58 que.push(temp); 59 } 60 } 61 } 62 } 63 64 int main() 65 { 66 int n; 67 68 while(scanf("%d",&n)!=EOF) 69 { 70 int m; 71 scanf("%d",&m); 72 73 memset(inde,0,sizeof(inde)); 74 for(int i=1;i<=n;i++) 75 node[i].clear(); 76 77 int u,v; 78 79 for(int i=1;i<=m;i++) 80 { 81 scanf("%d%d",&u,&v); 82 node[u].push_back(v); 83 inde[v]++; 84 } 85 86 topo(n); 87 88 for(int i=1;i<tot-1;i++) 89 printf("%d ",f[i]); 90 printf("%d\n",f[tot-1]); 91 } 92 93 return 0; 94 }
标签:
原文地址:http://www.cnblogs.com/-maybe/p/4491896.html