Acwing 1191. 家谱树 (topsort

Acwing 1191. 家谱树 (topsort添加链接描述#include<bits/stdc++.h>usingnamespacestd;constintN=109,M=1e4+10;;intn;inth[N],e[M],ne[M],idx,din[N];voidadd(inta,intb){e[idx]=b,ne[idx]=h[a],h[a]=idx++;}queue<int>q;intcnt,ans[N];voidtopsort(){for(inti=1;i<=

大家好,欢迎来到IT知识分享网。Acwing

添加链接描述

#include<bits/stdc++.h>
using namespace std;
const int N=109,M=1e4+10;;
int n;
int h[N],e[M],ne[M],idx,din[N];
void add(int a,int b){ 
   
  e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
queue<int>q;
int cnt,ans[N];
void topsort(){ 
   
  for(int i=1;i<=n;i++){ 
   
    if(!din[i]){ 
   
      q.push(i);
      ans[cnt++]=i;
    }
  }
  while(q.size()){ 
   
    int p=q.front();
    q.pop();
    for(int i=h[p];~i;i=ne[i]){ 
   
      int j=e[i];
      din[j]--;
      if(din[j]==0){ 
   
        ans[cnt++]=j;
        q.push(j);//入度为0则加队列
      }
      
    }
  }
}
int main(){ 
   
  cin>>n;
  memset(h,-1,sizeof h);
  for(int i=1;i<=n;i++){ 
   
    int x;
    while(cin>>x){ 
   
      if(x==0)break;
      add(i,x);
      din[x]++;
    }
  }
  topsort();
  for(int i=0;i<n;i++){ 
   
    cout<<ans[i]<<" ";
  }
  return 0;
}

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/21915.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信