红蓝绿三原色评测记录
忘关私 or @我
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100000;
bool a[MAXN], vis[MAXN];
vector<int> e[MAXN];
int cnt = 0;
void dfs(int x, bool start) {
if (a[x]) {
if (start)
cnt++;
return;
}
if (vis[x])
return;
vis[x] = true;
for (int i = 0; i < (int)e[x].size(); i++) {
int tmp = cnt;
dfs(e[x].at(i), true);
if (cnt != tmp) {
cnt++;
return;
}
}
}
int main() {
//freopen("test.in", "r", stdin);
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
int x;
scanf("%d", &x);
if (x)
a[i] = true;
else
a[i] = false;
vis[x] = false;
}
for (int i = 1; i < n; i++) {
int x, y;
scanf("%d%d", &x, &y);
e[x].push_back(y);
e[y].push_back(x);
}
for (int i = 1; i <= n; i++)
dfs(i, false);
printf("%d\n", cnt);
return 0;
}