题解 | 【模板】拓扑排序

【模板】拓扑排序

https://www.nowcoder.com/practice/04890358edb44997a4a942ece0f6c867

#include<bits/stdc++.h>

using namespace std;

const int N=2e5+5;

int n,m;
int b[N];
int vis[N];
int bel[N];
int cnt;

vector<int>V[N];

queue<int>q;

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        V[u].push_back(v);
        b[v]++;
    }
    for(int i=1;i<=n;i++) 
        if(b[i]==0) 
        {
            q.push(i);
            vis[i]=++cnt;
            bel[cnt]=i;
        }
    while(!q.empty())
    {
        int tmp=q.front();
        q.pop();
        for(int i=0;i<V[tmp].size();i++)
        {
            b[V[tmp][i]]--;
            if(!b[V[tmp][i]])
            {
                vis[V[tmp][i]]=++cnt;
                bel[cnt]=V[tmp][i];
                q.push(V[tmp][i]);
            }
        }
    }
    if(cnt<n) cout<<-1;
    else
    {
        for(int i=1;i<=cnt;i++)
        {
            cout<<bel[i];
            if(i<cnt) cout<<' ';
        }
    }
    return 0;
}

全部评论

相关推荐

白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务