#include <bits/stdc++.h>
using namespace std;
int n, k, s[500001], sum[500001], f[500001], sz[500001], ans = 1;
basic_string<int> adj[500001];
int dfs(int i, int p = 0) {
int deg = 0;
for (int j: adj[i]) {
if (j == p) continue;
int d = dfs(j, i);
deg += sz[j] ? d : 1;
sz[i] += sz[j];
}
ans += not sz[i] and deg == (i == 1);
return deg;
}
int main() {
cin >> n >> k;
for (int i = n; --i;) {
int a, b;
cin >> a >> b;
adj[a] += b;
adj[b] += a;
}
for (int i = 1; i <= n; ++i) {
cin >> s[i];
++f[s[i]];
}
for (int i = 1; i <= n; ++i) {
if (--f[s[i]]) sum[s[i]] += sz[i] = rand();
else sz[i] = -sum[s[i]];
}
dfs(1);
cout << ans / 2;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |