#include<bits/stdc++.h>
using namespace std;
const int maxn=500000+10;
vector<int>adj[maxn];
map<int,int>mp[maxn];
int cntc[maxn],sz[maxn],n,k,val[maxn],cnt[maxn],res;
bool cmp(int a,int b){
return sz[a]>sz[b];
}
void pre(int u=1,int par=0){
if(u!=1){
sort(adj[u].begin(),adj[u].end());
adj[u].erase(lower_bound(adj[u].begin(),adj[u].end(),par));
}
sz[u]=1;
for(auto x:adj[u]){
pre(x,u);
sz[u]+=sz[x];
}
sort(adj[u].begin(),adj[u].end(),cmp);
}
void solve(int u){
if((int)adj[u].size()==0){
if(cntc[val[u]]!=1){
mp[u][val[u]]=1;
}
else{
res++;
cnt[u]=1;
}
return ;
}
solve(adj[u][0]);
cnt[u]=cnt[adj[u][0]];
swap(mp[adj[u][0]],mp[u]);
for(int i=1;i<(int)adj[u].size();i++){
solve(adj[u][i]);
cnt[u]+=cnt[adj[u][i]];
for(auto x:mp[adj[u][i]]){
mp[u][x.first]+=x.second;
if(cntc[x.first]==mp[u][x.first]){
mp[u].erase(x.first);
}
}
}
mp[u][val[u]]++;
if(cntc[val[u]]==mp[u][val[u]]){
mp[u].erase(val[u]);
}
if((int)mp[u].size()==0){
if(cnt[u]==0){
res++;
}
if(u!=1){
cnt[u]=1;
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>k;
for(int i=0;i<n-1;i++){
int u,v;
cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
for(int i=1;i<=n;i++){
cin>>val[i];
cntc[val[i]]++;
}
pre(1);
solve(1);
if(cnt[1]==1){
res++;
}
if(n==1){
cout<<0<<"\n";
return 0;
}
cout<<((res+1)/2)<<"\n";
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
10 ms |
43100 KB |
Output is correct |
2 |
Correct |
8 ms |
43348 KB |
Output is correct |
3 |
Correct |
8 ms |
43352 KB |
Output is correct |
4 |
Correct |
9 ms |
43276 KB |
Output is correct |
5 |
Incorrect |
8 ms |
43100 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
10 ms |
43100 KB |
Output is correct |
2 |
Correct |
8 ms |
43348 KB |
Output is correct |
3 |
Correct |
8 ms |
43352 KB |
Output is correct |
4 |
Correct |
9 ms |
43276 KB |
Output is correct |
5 |
Incorrect |
8 ms |
43100 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
10 ms |
43100 KB |
Output is correct |
2 |
Correct |
8 ms |
43348 KB |
Output is correct |
3 |
Correct |
8 ms |
43352 KB |
Output is correct |
4 |
Correct |
9 ms |
43276 KB |
Output is correct |
5 |
Incorrect |
8 ms |
43100 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
57 ms |
51396 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
10 ms |
43100 KB |
Output is correct |
2 |
Correct |
8 ms |
43348 KB |
Output is correct |
3 |
Correct |
8 ms |
43352 KB |
Output is correct |
4 |
Correct |
9 ms |
43276 KB |
Output is correct |
5 |
Incorrect |
8 ms |
43100 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |