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

 

你可能感兴趣的:(tree)