https://ac.nowcoder.com/acm/problem/20857?&headNav=acm
思路:
#include<iostream>
#include<string>
#include<math.h>
#include<algorithm>
#include<bits/stdc++.h>
typedef long long ll;
ll gcd(ll a, ll b)
{
return b ? gcd(b, a % b) : a;
}
ll lcm(ll a, ll b) {
return a * b / (gcd(a, b));
}
#define PII pair<int,int>
using namespace std;
const int N = 2e6 + 10, mod = 1e9 + 7;
int qmi(int a, int k, int p) //快速幂模板
{
int res = 1;
while (k)
{
if (k & 1) res = (ll)res * a % p;
k >>= 1;
a = (ll)a * a % p;
}
return res;
}
///////////////////////////////////////////////////////////
vector<int> a[N];
long long b[N], p[N], ans = 0;
int n;
void dfs(int x, int y) {
p[x] = 1;
long long sign = n - 1;
for (int i = 0; i < a[x].size(); i++) {
int son = a[x][i];
if (son == y)
continue;
dfs(son, x);
sign += p[son] * (n - p[son]);
p[x] += p[son];
}
sign += p[x] * (n - p[x]);
sign = sign / 2;
if (sign % 2)
ans ^= b[x];
}
int main() {
cin >> n;
for (int i = 0; i < n - 1; i++) {
int u, v;
cin >> u >> v;
a[u].push_back(v);
a[v].push_back(u);
}
for (int i = 1; i <= n; i++)
cin >> b[i];
dfs(1, 0);
cout << ans << endl;
return 0;
}
awsl
京公网安备 11010502036488号