HDOJ1285(拓扑排序)
1 #include <iomanip> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <algorithm> 6 #include <queue> 7 #include <stack> 8 #include <vector> 9 using namespace std; 10 int n,m,inbug[550],sum,a[550]; 11 vector<int>e[550]; 12 void topsort() 13 { 14 priority_queue<int>q; 15 for(int i=1;i<=n;i++) 16 if(inbug[i]==0) 17 q.push(-i); 18 while(!q.empty()) 19 { 20 int now=q.top(); 21 q.pop(); 22 a[sum++]=now; 23 for(int i=0;i<e[-now].size();i++) 24 { 25 if(--inbug[e[-now][i]]==0) 26 q.push(-e[-now][i]); 27 } 28 } 29 return; 30 } 31 int main(int argc, char *argv[]) 32 { 33 while(scanf("%d%d",&n,&m)!=EOF) 34 { 35 for(int i=0;i<=n;i++) 36 e[i].clear(); 37 memset(inbug,0,sizeof(inbug)); 38 for(int i=0;i<m;i++) 39 { 40 int u,v; 41 scanf("%d%d",&u,&v); 42 e[u].push_back(v); 43 inbug[v]++; 44 } 45 sum=0; 46 topsort(); 47 printf("%d",-a[0]); 48 for(int i=1;i<sum;i++) 49 printf(" %d",-a[i]); 50 printf("\n"); 51 } 52 return 0; 53 }