1022. Genealogical Tree(topo)

1022

简单拓扑 不能直接dfs 可能有不联通的

 1     #include <iostream>
 2     #include<cstdio>
 3     #include<cstring>
 4     #include<algorithm>
 5     #include<stdlib.h>
 6     #include<vector>
 7     using namespace std;
 8     vector<int>ed[110];
 9     int n,pa[110],de[110];
10     void topo()
11     {
12         int i,j;
13         for(i = 1; i <= n ; i++)
14         {
15             for(j = 1; j <= n ;j++)
16             {
17                 if(de[j]==0)
18                 {
19                     de[j] = -1;
20                     pa[i] = j;
21                     for(int k = 0 ; k < (int)ed[j].size() ; k++)
22                     de[ed[j][k]]--;
23                     break;
24                 }
25             }
26         }
27     }
28     int main()
29     {
30         int i,k;
31         scanf("%d",&n);
32         for(i = 1; i <= n ; i++)
33         {
34             while(scanf("%d",&k)&&k)
35             {
36                 ed[i].push_back(k);
37                 de[k]++;
38             }
39         }
40         topo();
41         for(i = 1; i < n ;i++)
42         printf("%d ",pa[i]);
43         printf("%d\n",pa[n]);
44         return 0;
45     }
View Code

 

转载于:https://www.cnblogs.com/shangyu/p/3351621.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值