题解 | #【模板】拓扑排序#

【模板】拓扑排序

https://www.nowcoder.com/practice/88f7e156ca7d43a1a535f619cd3f495c

#include<bits/stdc++.h>
using namespace std;
int n,m;
const int maxn=1e5+100;
int ne[maxn],e[maxn],h[maxn],idx,q[maxn],d[maxn];
void add(int a,int b)
{
    e[idx]=b; ne[idx]=h[a]; h[a]=idx++;
}
bool topsort()
{

    int hh=0,tt=-1;
    for(int i=1;i<=n;i++){
        if(d[i]==0) {
            q[++tt]=i;
        }
    }
    while(hh<=tt)
    {
        auto t=q[hh++];
        for(int i=h[t];i!=-1;i=ne[i])
        {
            int j=e[i];
            d[j]--;
            if(d[j]==0)
            {
                q[++tt]=j;
            }
        }
    }
    return tt==n-1; //所有点的入列了,那么说明它是一个有向无环图,具有拓扑序
}
int main()
{
    memset(h,-1,sizeof h);
    int i,j,a,b;
    cin>>n>>m;
    for(i=0;i<m;i++){
        cin>>a>>b;
        add(a,b);
        d[b]++;
    }
    if(topsort())
    {
        for(i=0;i<n;i++){
            cout<<q[i]<<" ";

        }
        cn;
    }
    else
    {
        cout<<-1<<endl;
    }
    return 0;
}


全部评论

相关推荐

三分入剑:我觉得还是学历问题 如果你真的想要进大厂不想在小厂的话读个211得研究生吧 我感觉简历还没你好呢 我都实习了俩月了 我投了一百多份能投出20多份简历 能面试六七次 我们部门只招研究生了都 现在连9本都很难找到像样的大厂了 你又没打过rm这种 我觉得想要进步的话就考个研究生吧
点赞 评论 收藏
分享
02-04 17:01
南昌大学 Java
牛客96763241...:拿插件直接投就完了,这玩意看运气的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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