图论-拓扑排序

模板题:软件构建

点击查看代码
#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];
        }
    }
}
posted @ 2026-01-23 18:01  spark_of_fire  阅读(4)  评论(0)    收藏  举报