B3644 【模板】拓扑排序 / 家谱树

原题链接

拓扑排序模板。

code

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
int head[105],Next[N],to[N],que[105],sum[105];
void build(int i,int cnt,int x){
    Next[cnt]=head[i];
    to[cnt]=x;
    head[i]=cnt;
    sum[x]++;
}
int main(){
    int n,cnt=1;
    cin>>n;
    for (int i=1;i<=n;i++){
        int x;
        while (cin>>x && x!=0){
            build(i,cnt,x);
            cnt++;
        }
    }
    int l=0,r=0;
    for (int i=1;i<=n;i++) if (sum[i]==0) que[r++]=i;
    while (l<r){
        for (int j=head[que[l]];j>0;){
            if (--sum[to[j]]==0) que[r++]=to[j];
            j=Next[j];
        }
        l++;
    }
    for (int i=0;i<r;i++)
        if (i==0) cout<<que[i];
        else cout<<" "<<que[i];
    return 0;
}

 

posted @ 2024-02-23 18:25  黑屿白  阅读(40)  评论(0)    收藏  举报