标签:
1 #include<cstdio> 2 #include<cstring> 3 #include<vector> 4 #include<iostream> 5 #include<queue> 6 #include<algorithm> 7 using namespace std; 8 9 const int maxn =30005; 10 vector<int>G[maxn]; 11 int topo[maxn]; 12 int indegree[maxn]; 13 int m,n; 14 15 void init() 16 { 17 for(int i=1;i<=m;i++) 18 G[i].clear(); 19 memset(indegree,0,sizeof(indegree)); 20 } 21 22 void toposort() 23 { 24 priority_queue<int,vector<int>,less<int> >q; 25 for(int i=1;i<=m;i++) 26 if(!indegree[i]) 27 q.push(i); 28 int t=1; 29 while(!q.empty()) 30 { 31 int u=q.top(); 32 q.pop(); 33 topo[t++]=u; 34 int cap=G[u].size(); 35 for(int v=0;v<cap;v++) 36 { 37 indegree[G[u][v]]--; 38 if(indegree[G[u][v]]==0) 39 q.push(G[u][v]); 40 } 41 } 42 } 43 44 int main() 45 { 46 int t,a,b; 47 scanf("%d",&t); 48 while(t--) 49 { 50 scanf("%d%d",&m,&n); 51 init(); 52 for(int i=0;i<n;i++) 53 { 54 scanf("%d%d",&a,&b); 55 /*vector<int>::iterator iter=find(G[b].begin(),G[b].end(),a); 56 if(iter==G[b].end())*/ 57 indegree[a]++; 58 G[b].push_back(a); 59 } 60 toposort(); 61 for(int i=m;i>=1;i--) 62 { 63 if(i!=1) 64 printf("%d ",topo[i]); 65 else 66 printf("%d\n",topo[i]); 67 } 68 } 69 return 0; 70 }
标签:
原文地址:http://www.cnblogs.com/homura/p/4731173.html