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
",pa[n]);
44         return 0;
45     }
View Code
原文地址:https://www.cnblogs.com/shangyu/p/3351621.html