1242. Werewolf(dfs)

1242

简单dfs 往孩子方向搜一遍 父母方向搜一遍 输入还搞什么字符串。。

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cstdlib>
 6 #include<vector>
 7 using namespace std;
 8 vector<int>fa[1010];
 9 vector<int>ch[1010];
10 int u,v,q[1010];
11 int w[1010],vis1[1010],vis2[1010],o;
12 void dfs1(int u)
13 {
14     int i;
15     for(i = 0 ; i < (int)fa[u].size() ; i++)
16     {
17         int v = fa[u][i];
18         if(!vis1[v])
19         {
20             vis1[v] = 1;
21             dfs1(v);
22         }
23     }
24 }
25 void dfs2(int u)
26 {
27     int i;
28     for(i = 0 ; i < (int)ch[u].size() ; i++)
29     {
30         int v = ch[u][i];
31         if(!vis2[v])
32         {
33             vis2[v] = 1;
34             dfs2(v);
35         }
36     }
37 }
38 int main()
39 {
40     int i,j,n;
41     char s1[20],s2[20];
42     scanf("%d",&n);
43     while(cin>>s1)
44     {
45         if(strcmp(s1,"BLOOD")==0)
46         break;
47         cin>>s2;
48         u = atoi(s1);
49         v = atoi(s2);
50         fa[u].push_back(v);
51         ch[v].push_back(u);
52     }
53     int g = 0;
54     while(scanf("%d",&j)!=EOF)
55     {
56         g++;
57         q[g] = j;
58     }
59     for(i = 1; i <= g ; i++)
60     {
61         if(!vis1[q[i]])
62         {
63             vis1[q[i]] = 1;
64             dfs1(q[i]);
65         }
66     }
67     for(i = 1; i <= g ; i++)
68     {
69         if(!vis2[q[i]])
70         {
71             vis2[q[i]] = 1;
72             dfs2(q[i]);
73         }
74     }
75     for(i = 1; i <= n ;i++)
76     if(!vis2[i]&&!vis1[i])
77     {
78         o++;
79         w[o] = i;
80     }
81     if(!o)
82     printf("0
");
83     else
84     {
85         for(i = 1; i < o ; i++)
86         printf("%d ",w[i]);
87         printf("%d
",w[o]);
88     }
89     return 0;
90 }
View Code
原文地址:https://www.cnblogs.com/shangyu/p/3353048.html