HDU1285(拓扑排序裸题

不羁的心 提交于 2019-12-05 09:17:55

。。被多组测试坑了一波

 1 #include<iostream>
 2 #include<vector>
 3 #include<queue>
 4 using namespace std;
 5 typedef long long ll;
 6 const int N = 1e3;
 7 vector<int>edge[N];
 8 vector<int> ans;
 9 priority_queue<int, vector<int>, greater<int> >q;
10 int n,m,l,r,in[N];
11 int main(){
12     ios::sync_with_stdio(0);
13     while(cin>>n>>m){
14         
15     ans.clear();while(!q.empty())q.pop();
16     for(int i = 1;i <= n;++i){in[i] = 0;edge[i].clear();}
17     
18     for(int i = 1;i <= m;++i){
19         cin>>l>>r;
20         edge[l].push_back(r);in[r]++;
21     }
22     for(int i = 1;i <= n;++i)if(in[i]==0)q.push(i);
23     while(!q.empty()){
24         int p = q.top();q.pop();
25         ans.push_back(p);
26         for(int i = 0; i < edge[p].size();++i){
27             int y = edge[p][i];in[y]--;
28             if(!in[y])q.push(y); 
29         }
30     }
31     for(int i = 0;i < n;++i){
32         if(i!=n-1)cout<<ans[i]<<" ";
33         else cout<<ans[i]<<endl;
34     }
35     }
36     return 0;
37 }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!