哪些行业做网站最重要,长治网站开发,昌平网站开发公司,请人做网站要注意什么http://codeforces.com/problemset/problem/430/C 题意#xff1a;在一棵上有n个节点#xff0c;有n-1条边#xff0c;在每一个节点上有一个值0或1#xff0c;然后给你一个目标树#xff0c;让你选择节点#xff0c;然后把节点的值翻转#xff0c;它的孙子节点跟着翻转在一棵上有n个节点有n-1条边在每一个节点上有一个值0或1然后给你一个目标树让你选择节点然后把节点的值翻转它的孙子节点跟着翻转依次类推。。。问经过最少次数可以使这棵树变成目标树。 思路利用异或的性质任何数和0异或为它本身从根节点dfs就行。 1 #include cstdio2 #include vector3 #include cstring4 #include algorithm5 #define maxn 2001006 using namespace std;7 8 int n,k,x;9 int a[maxn];
10 int b[maxn];
11 int num[maxn];
12 bool vis[maxn];
13 vectorintg[maxn];
14 int ans[maxn];
15 int cnt;
16 void dfs(int c,int x,int y)
17 {
18 if((a[c]^x)!b[c])
19 {
20 ans[cnt]c;
21 x!x;
22 }
23 for(int i0; i(int)g[c].size(); i)
24 {
25 int vg[c][i];
26 if(!vis[v])
27 {
28 vis[v]true;
29 dfs(v,y,x);
30 }
31 }
32 }
33
34 int main()
35 {
36 scanf(%d,n);
37 for(int i1; in; i)
38 {
39 int u,v;
40 scanf(%d%d,u,v);
41 g[u].push_back(v);
42 g[v].push_back(u);
43 }
44 for(int i1; in; i)
45 {
46 scanf(%d,a[i]);
47 }
48 for(int i1; in; i)
49 {
50 scanf(%d,b[i]);
51 }
52 vis[1]true;
53 dfs(1,0,0);
54 printf(%d\n,cnt);
55 for(int i0; icnt; i)
56 {
57 printf(%d\n,ans[i]);
58 }
59 return 0;
60 } View Code 转载于:https://www.cnblogs.com/fanminghui/p/4314210.html