#include <bits/stdc++.h>
using namespace std;
int N, K, X, Y, state[500005], par[500005], sz[500005], anc[500005];
int lca[500005][20], depth[500005];
vector<int> AdjList[500005], AdjList2[500005], st[500005];
void dfs_init(int x, int p){
anc[x] = p;
lca[x][0] = p;
for (int i = 1; i < 20; ++i){
lca[x][i] = lca[lca[x][i-1]][i-1];
}
for (auto it : AdjList[x]){
if (it == p) continue;
depth[it] = depth[x] + 1;
dfs_init(it,x);
}
}
int get_lca(int x, int y){
if (depth[x] > depth[y]) swap(x,y);
int d = depth[y] - depth[x];
for (int i = 0; i < 20; ++i){
if (d & (1 << i)){
y = lca[y][i];
}
}
if (x == y) return x;
for (int i = 19; i >= 0; --i){
if (lca[x][i] != lca[y][i]){
x = lca[x][i];
y = lca[y][i];
}
}
return lca[x][0];
}
int find_par(int x){
if (x != par[x]) par[x] = find_par(par[x]);
return par[x];
}
void merg(int x, int y){
int X = find_par(x), Y = find_par(y);
if (X == Y) return;
if (sz[X] < sz[Y]) swap(X,Y);
par[Y] = X;
sz[X] += sz[Y];
}
int combine(int x, int t){
if (anc[x] == anc[t]) return anc[t];
merg(x,anc[x]);
anc[x] = combine(anc[x],t);
return anc[x];
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> N >> K;
for (int i = 1; i < N; ++i){
cin >> X >> Y;
AdjList[X].push_back(Y);
AdjList[Y].push_back(X);
}
for (int i = 1; i <= N; ++i){
par[i] = i;
sz[i] = 1;
cin >> state[i];
st[state[i]].push_back(i);
}
dfs_init(1,0);
for (int i = 1; i <= K; ++i){
int L = st[i][0];
for (int j = 1; j < st[i].size(); ++j){
L = get_lca(L,st[i][j]);
}
//cout << i << ' ' << L << '\n';
for (auto it : st[i]){
anc[it] = combine(it,L);
}
}
for (int i = 1; i <= N; ++i){
for (auto it : AdjList[i]){
if (find_par(i) != find_par(it)){
AdjList2[find_par(i)].push_back(find_par(it));
}
}
}
int leaves = 0;
for (int i = 1; i <= N; ++i){
if (AdjList2[i].size() == 1) leaves++;
}
cout << (leaves+1)/2 << '\n';
}
Compilation message
mergers.cpp: In function 'int main()':
mergers.cpp:78:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int j = 1; j < st[i].size(); ++j){
~~^~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
26 ms |
35576 KB |
Output is correct |
2 |
Correct |
26 ms |
35576 KB |
Output is correct |
3 |
Correct |
26 ms |
35576 KB |
Output is correct |
4 |
Correct |
25 ms |
35576 KB |
Output is correct |
5 |
Correct |
26 ms |
35576 KB |
Output is correct |
6 |
Correct |
26 ms |
35580 KB |
Output is correct |
7 |
Correct |
26 ms |
35576 KB |
Output is correct |
8 |
Runtime error |
258 ms |
262148 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
9 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
26 ms |
35576 KB |
Output is correct |
2 |
Correct |
26 ms |
35576 KB |
Output is correct |
3 |
Correct |
26 ms |
35576 KB |
Output is correct |
4 |
Correct |
25 ms |
35576 KB |
Output is correct |
5 |
Correct |
26 ms |
35576 KB |
Output is correct |
6 |
Correct |
26 ms |
35580 KB |
Output is correct |
7 |
Correct |
26 ms |
35576 KB |
Output is correct |
8 |
Runtime error |
258 ms |
262148 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
9 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
26 ms |
35576 KB |
Output is correct |
2 |
Correct |
26 ms |
35576 KB |
Output is correct |
3 |
Correct |
26 ms |
35576 KB |
Output is correct |
4 |
Correct |
25 ms |
35576 KB |
Output is correct |
5 |
Correct |
26 ms |
35576 KB |
Output is correct |
6 |
Correct |
26 ms |
35580 KB |
Output is correct |
7 |
Correct |
26 ms |
35576 KB |
Output is correct |
8 |
Runtime error |
258 ms |
262148 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
9 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
114 ms |
50928 KB |
Output is correct |
2 |
Correct |
136 ms |
57328 KB |
Output is correct |
3 |
Correct |
28 ms |
36088 KB |
Output is correct |
4 |
Correct |
29 ms |
36088 KB |
Output is correct |
5 |
Correct |
25 ms |
35576 KB |
Output is correct |
6 |
Correct |
27 ms |
35576 KB |
Output is correct |
7 |
Correct |
29 ms |
36088 KB |
Output is correct |
8 |
Runtime error |
339 ms |
262148 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
9 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
26 ms |
35576 KB |
Output is correct |
2 |
Correct |
26 ms |
35576 KB |
Output is correct |
3 |
Correct |
26 ms |
35576 KB |
Output is correct |
4 |
Correct |
25 ms |
35576 KB |
Output is correct |
5 |
Correct |
26 ms |
35576 KB |
Output is correct |
6 |
Correct |
26 ms |
35580 KB |
Output is correct |
7 |
Correct |
26 ms |
35576 KB |
Output is correct |
8 |
Runtime error |
258 ms |
262148 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
9 |
Halted |
0 ms |
0 KB |
- |