杭電ACM1285----確定比賽名次『拓撲排序』
阿新 • • 發佈:2017-08-12
sizeof color scan class logs 優先隊列 nbsp pop --
1 //裸拓撲排序,註意先輸出比較小的數,使用優先隊列即可 2 #include <cstdio> 3 #include <vector> 4 #include <cstring> 5 #include <queue> 6 #include <algorithm> 7 using namespace std; 8 const int maxn = 505; 9 vector<int> v[maxn]; 10 priority_queue<int> q; 11 int f[maxn]; 12 int main()13 { 14 int n,m,x,y; 15 while(~scanf("%d%d",&n,&m)) 16 { 17 memset(f,0,sizeof f); 18 for(int i = 1; i <= n; ++i) 19 v[i].clear(); 20 while(m--) 21 { 22 scanf("%d%d",&x,&y); 23 v[x].push_back(y); 24 ++f[y];25 } 26 for(int i = 1; i <= n; ++i) 27 if(f[i] == 0) 28 q.push(-i);//默認大根堆 29 bool flag = true; 30 while(!q.empty()) 31 { 32 int t = -q.top(); q.pop(); 33 if(flag) { printf("%d",t); flag = false;} 34 elseprintf(" %d",t); 35 for(int i = 0; i < v[t].size(); ++i) 36 if(!(--f[v[t][i]])) q.push(-v[t][i]); 37 } 38 printf("\n"); 39 } 40 return 0; 41 }
杭電ACM1285----確定比賽名次『拓撲排序』