图论-拓扑排序
模板题:软件构建
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
vector<int> v[N];
int main()
{
int n,m;
cin>>n>>m;
vector<int>in(n);
for(int i=0;i<m;i++)
{
int s,t;
cin>>s>>t;
in[t]++;
v[s].push_back(t);
}
queue<int> q;
for(int i=0;i<n;i++){
if(in[i]==0)q.push(i);
}
vector<int> ans;
while(q.size()){
int w=q.front();
q.pop();
ans.push_back(w);
for(auto k:v[w]){
in[k]--;
if(in[k]==0)q.push(k);
}
}
if(ans.size()<n)cout<<-1;
else{
cout<<ans[0];
for(int i=1;i<ans.size();i++){
cout<<' '<<ans[i];
}
}
}
浙公网安备 33010602011771号