1 条题解

  • 0
    @ 2024-11-4 17:27:01

    模板 拓扑排序

    #include<iostream>
    using namespace std;
    const int N=1e4+7;
    int n;
    struct edge{
        int to,nxt;
    }t[N];
    int deg[N],ans[N],tot,en;
    int h[N];
    void add(int u,int v){
        t[++tot].to=v;
        t[tot].nxt=h[u];
        h[u]=tot;
    }
    int main(){
        cin>>n;
        for(int i=1; i<=n; i++){
            int u,v;
            cin>>u>>v;
            add(u,v);
            deg[i]++;
        }
        for(int i=1; i<=n; i++)
            if(!deg[i])ans[++en]=i;
        int pos=1; 
        while(pos<=en){
            int u=ans[pos++];
            for(int i=h[u];i; i=t[u].nxt){
                if(!--deg[i]){
                    ans[++en]=t[i].to;
                }
            }
        }
        for(int i=1; i<=n; i++)
            cout<<ans[i]<<" ";
        return 0;
    }
    
    • 1

    信息

    ID
    4660
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    9
    已通过
    8
    上传者