#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define f first
#define s second
#define pb push_back
#define all(x) x.begin(),x.end()
#define vi vector<int>
#define vvi vector<vi>
#define vp vector<pii>
using namespace std;
const int N=5e5+5;
vector<int>g[N];
set<int>gg[N];
int sz[N],id[N],pr[N],head[N],dep[N],cur=0,t[4*N],lz[4*N],pos[N],cp=1,n;
void push(int i,int l,int r){
if(lz[i]==1e9)return;
t[i]=min(t[i],lz[i]);
if(l<r){
lz[2*i]=min(lz[2*i],lz[i]);
lz[2*i+1]=min(lz[2*i+1],lz[i]);
}lz[i]=1e9;
}
void upd(int i,int l,int r,int tl,int tr,int id){
push(i,l,r);
if(r<tl||l>tr)return;
if(r<=tr&&l>=tl){
lz[i]=min(lz[i],id);push(i,l,r);
return;
}int m=(l+r)>>1;
upd(2*i,l,m,tl,tr,id);upd(2*i+1,m+1,r,tl,tr,id);
t[i]=min(t[2*i],t[2*i+1]);
}
int qr(int i,int l,int r,int tl,int tr){
push(i,l,r);
if(r<tl||l>tr)return 1e9;
if(r<=tr&&l>=tl)return t[i];
int m=(l+r)>>1;
return min(qr(2*i,l,m,tl,tr),qr(2*i+1,m+1,r,tl,tr));
}
void update(int x,int y,int z){
while(head[x]!=head[y]){
if(dep[head[x]]<dep[head[y]])swap(x,y);
upd(1,1,n,id[head[x]],id[x],z);
x=pr[head[x]];
}if(dep[x]>dep[y])swap(x,y);
upd(1,1,n,id[x],id[y],z);
}
int query(int x,int y,int res=1e9){
while(head[x]!=head[y]){
if(dep[head[x]]<dep[head[y]])swap(x,y);
res=min(qr(1,1,n,id[head[x]],id[x]),res);
x=pr[head[x]];
}if(dep[x]>dep[y])swap(x,y);
res=min(res,qr(1,1,n,id[x],id[y]));return res;
}
void dfssz(int u,int p,int l){
sz[u]=1;dep[u]=l;pr[u]=p;
for(auto v:g[u]){
if(v==p)continue;dfssz(v,u,l+1);
sz[u]+=sz[v];
}
}
void hld(int u,int p,int tp){
head[u]=tp;id[u]=++cur;
int hc=-1,hv=-1;
for(auto v:g[u]){
if(v==p)continue;
if(sz[v]>hc)hv=v,hc=sz[v];
}if(hv==-1)return;
hld(hv,u,tp);
for(auto v:g[u]){
if(v==p||v==hv)continue;
hld(v,u,v);
}
}vector<int>gr[N];
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);
int k;cin>>n>>k;
for(int i=0;i<4*N;i++)t[i]=lz[i]=1e9;
for(int i=1;i<=n-1;i++){
int u,v;cin>>u>>v;g[u].pb(v);g[v].pb(u);
}dfssz(1,1,0);hld(1,1,1);bool ok=1;
for(int i=1,x;i<=n;i++)cin>>x,gr[x].pb(i);
for(int i=1;i<=k;i++){
if(gr[i].empty())continue;
int top=gr[i][0];int res=cp;
for(int j=0;j<gr[i].size();j++)res=min(res,query(top,gr[i][j]));
for(int j=0;j<gr[i].size();j++)update(top,gr[i][j],res);
cp++;
}
for(int i=k;i>=1;i--){
if(gr[i].empty())continue;
int top=gr[i][0];int res=1e9;
for(int j=0;j<gr[i].size();j++)res=min(res,query(top,gr[i][j]));
for(int j=0;j<gr[i].size();j++)update(top,gr[i][j],res);
}
for(int i=1;i<=n;i++)pos[i]=qr(1,1,n,id[i],id[i]);
for(int i=1;i<=n;i++){
for(auto v:g[i]){
if(pos[v]==pos[i])continue;
gg[pos[v]].insert(pos[i]);
gg[pos[i]].insert(pos[v]);
}
}int ct=0;
for(int i=1;i<=n;i++){
if(gg[i].empty())continue;
if(gg[i].size()==1)ct++;
}cout<<(ct+1)/2;
}
Compilation message
mergers.cpp: In function 'void dfssz(int, int, int)':
mergers.cpp:61:9: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
61 | if(v==p)continue;dfssz(v,u,l+1);
| ^~
mergers.cpp:61:26: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
61 | if(v==p)continue;dfssz(v,u,l+1);
| ^~~~~
mergers.cpp: In function 'int main()':
mergers.cpp:89:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
89 | for(int j=0;j<gr[i].size();j++)res=min(res,query(top,gr[i][j]));
| ~^~~~~~~~~~~~~
mergers.cpp:90:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
90 | for(int j=0;j<gr[i].size();j++)update(top,gr[i][j],res);
| ~^~~~~~~~~~~~~
mergers.cpp:96:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
96 | for(int j=0;j<gr[i].size();j++)res=min(res,query(top,gr[i][j]));
| ~^~~~~~~~~~~~~
mergers.cpp:97:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
97 | for(int j=0;j<gr[i].size();j++)update(top,gr[i][j],res);
| ~^~~~~~~~~~~~~
mergers.cpp:84:35: warning: unused variable 'ok' [-Wunused-variable]
84 | }dfssz(1,1,0);hld(1,1,1);bool ok=1;
| ^~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
22 ms |
74848 KB |
Output is correct |
2 |
Correct |
19 ms |
74588 KB |
Output is correct |
3 |
Correct |
20 ms |
74588 KB |
Output is correct |
4 |
Correct |
20 ms |
74584 KB |
Output is correct |
5 |
Correct |
19 ms |
74780 KB |
Output is correct |
6 |
Correct |
19 ms |
74588 KB |
Output is correct |
7 |
Correct |
18 ms |
74824 KB |
Output is correct |
8 |
Correct |
19 ms |
74584 KB |
Output is correct |
9 |
Correct |
22 ms |
74588 KB |
Output is correct |
10 |
Correct |
19 ms |
74584 KB |
Output is correct |
11 |
Correct |
19 ms |
74764 KB |
Output is correct |
12 |
Correct |
19 ms |
74584 KB |
Output is correct |
13 |
Correct |
21 ms |
74588 KB |
Output is correct |
14 |
Correct |
20 ms |
74584 KB |
Output is correct |
15 |
Correct |
20 ms |
75096 KB |
Output is correct |
16 |
Correct |
19 ms |
74584 KB |
Output is correct |
17 |
Correct |
19 ms |
74840 KB |
Output is correct |
18 |
Correct |
19 ms |
74584 KB |
Output is correct |
19 |
Correct |
19 ms |
74584 KB |
Output is correct |
20 |
Correct |
20 ms |
74588 KB |
Output is correct |
21 |
Correct |
20 ms |
74584 KB |
Output is correct |
22 |
Correct |
19 ms |
74768 KB |
Output is correct |
23 |
Correct |
19 ms |
74584 KB |
Output is correct |
24 |
Correct |
20 ms |
74840 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
22 ms |
74848 KB |
Output is correct |
2 |
Correct |
19 ms |
74588 KB |
Output is correct |
3 |
Correct |
20 ms |
74588 KB |
Output is correct |
4 |
Correct |
20 ms |
74584 KB |
Output is correct |
5 |
Correct |
19 ms |
74780 KB |
Output is correct |
6 |
Correct |
19 ms |
74588 KB |
Output is correct |
7 |
Correct |
18 ms |
74824 KB |
Output is correct |
8 |
Correct |
19 ms |
74584 KB |
Output is correct |
9 |
Correct |
22 ms |
74588 KB |
Output is correct |
10 |
Correct |
19 ms |
74584 KB |
Output is correct |
11 |
Correct |
19 ms |
74764 KB |
Output is correct |
12 |
Correct |
19 ms |
74584 KB |
Output is correct |
13 |
Correct |
21 ms |
74588 KB |
Output is correct |
14 |
Correct |
20 ms |
74584 KB |
Output is correct |
15 |
Correct |
20 ms |
75096 KB |
Output is correct |
16 |
Correct |
19 ms |
74584 KB |
Output is correct |
17 |
Correct |
19 ms |
74840 KB |
Output is correct |
18 |
Correct |
19 ms |
74584 KB |
Output is correct |
19 |
Correct |
19 ms |
74584 KB |
Output is correct |
20 |
Correct |
20 ms |
74588 KB |
Output is correct |
21 |
Correct |
20 ms |
74584 KB |
Output is correct |
22 |
Correct |
19 ms |
74768 KB |
Output is correct |
23 |
Correct |
19 ms |
74584 KB |
Output is correct |
24 |
Correct |
20 ms |
74840 KB |
Output is correct |
25 |
Correct |
19 ms |
74584 KB |
Output is correct |
26 |
Correct |
25 ms |
75100 KB |
Output is correct |
27 |
Correct |
24 ms |
74844 KB |
Output is correct |
28 |
Correct |
26 ms |
75284 KB |
Output is correct |
29 |
Correct |
25 ms |
75352 KB |
Output is correct |
30 |
Correct |
31 ms |
74944 KB |
Output is correct |
31 |
Correct |
20 ms |
74584 KB |
Output is correct |
32 |
Correct |
23 ms |
75144 KB |
Output is correct |
33 |
Correct |
19 ms |
74776 KB |
Output is correct |
34 |
Correct |
25 ms |
74844 KB |
Output is correct |
35 |
Correct |
26 ms |
75088 KB |
Output is correct |
36 |
Correct |
25 ms |
74840 KB |
Output is correct |
37 |
Correct |
26 ms |
74988 KB |
Output is correct |
38 |
Correct |
20 ms |
74584 KB |
Output is correct |
39 |
Correct |
28 ms |
75096 KB |
Output is correct |
40 |
Correct |
26 ms |
74840 KB |
Output is correct |
41 |
Correct |
30 ms |
74960 KB |
Output is correct |
42 |
Correct |
24 ms |
75028 KB |
Output is correct |
43 |
Correct |
23 ms |
75096 KB |
Output is correct |
44 |
Correct |
20 ms |
74584 KB |
Output is correct |
45 |
Correct |
23 ms |
74896 KB |
Output is correct |
46 |
Incorrect |
25 ms |
74840 KB |
Output isn't correct |
47 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
22 ms |
74848 KB |
Output is correct |
2 |
Correct |
19 ms |
74588 KB |
Output is correct |
3 |
Correct |
20 ms |
74588 KB |
Output is correct |
4 |
Correct |
20 ms |
74584 KB |
Output is correct |
5 |
Correct |
19 ms |
74780 KB |
Output is correct |
6 |
Correct |
19 ms |
74588 KB |
Output is correct |
7 |
Correct |
18 ms |
74824 KB |
Output is correct |
8 |
Correct |
19 ms |
74584 KB |
Output is correct |
9 |
Correct |
22 ms |
74588 KB |
Output is correct |
10 |
Correct |
19 ms |
74584 KB |
Output is correct |
11 |
Correct |
19 ms |
74764 KB |
Output is correct |
12 |
Correct |
19 ms |
74584 KB |
Output is correct |
13 |
Correct |
21 ms |
74588 KB |
Output is correct |
14 |
Correct |
20 ms |
74584 KB |
Output is correct |
15 |
Correct |
20 ms |
75096 KB |
Output is correct |
16 |
Correct |
19 ms |
74584 KB |
Output is correct |
17 |
Correct |
19 ms |
74840 KB |
Output is correct |
18 |
Correct |
19 ms |
74584 KB |
Output is correct |
19 |
Correct |
19 ms |
74584 KB |
Output is correct |
20 |
Correct |
20 ms |
74588 KB |
Output is correct |
21 |
Correct |
20 ms |
74584 KB |
Output is correct |
22 |
Correct |
19 ms |
74768 KB |
Output is correct |
23 |
Correct |
19 ms |
74584 KB |
Output is correct |
24 |
Correct |
20 ms |
74840 KB |
Output is correct |
25 |
Correct |
21 ms |
74584 KB |
Output is correct |
26 |
Correct |
291 ms |
78844 KB |
Output is correct |
27 |
Correct |
792 ms |
78568 KB |
Output is correct |
28 |
Correct |
23 ms |
74840 KB |
Output is correct |
29 |
Correct |
20 ms |
74584 KB |
Output is correct |
30 |
Correct |
21 ms |
74584 KB |
Output is correct |
31 |
Correct |
542 ms |
78540 KB |
Output is correct |
32 |
Correct |
26 ms |
74844 KB |
Output is correct |
33 |
Correct |
263 ms |
85736 KB |
Output is correct |
34 |
Correct |
797 ms |
78628 KB |
Output is correct |
35 |
Correct |
26 ms |
74844 KB |
Output is correct |
36 |
Correct |
269 ms |
79296 KB |
Output is correct |
37 |
Correct |
28 ms |
74840 KB |
Output is correct |
38 |
Correct |
28 ms |
75096 KB |
Output is correct |
39 |
Correct |
326 ms |
78924 KB |
Output is correct |
40 |
Correct |
23 ms |
75032 KB |
Output is correct |
41 |
Correct |
558 ms |
78676 KB |
Output is correct |
42 |
Correct |
331 ms |
80912 KB |
Output is correct |
43 |
Correct |
20 ms |
74584 KB |
Output is correct |
44 |
Correct |
212 ms |
86136 KB |
Output is correct |
45 |
Correct |
340 ms |
82316 KB |
Output is correct |
46 |
Correct |
25 ms |
74840 KB |
Output is correct |
47 |
Correct |
31 ms |
74840 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
292 ms |
79052 KB |
Output is correct |
2 |
Correct |
288 ms |
90688 KB |
Output is correct |
3 |
Correct |
24 ms |
75132 KB |
Output is correct |
4 |
Correct |
25 ms |
74840 KB |
Output is correct |
5 |
Correct |
18 ms |
74584 KB |
Output is correct |
6 |
Correct |
20 ms |
74840 KB |
Output is correct |
7 |
Correct |
28 ms |
74832 KB |
Output is correct |
8 |
Incorrect |
348 ms |
80392 KB |
Output isn't correct |
9 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
22 ms |
74848 KB |
Output is correct |
2 |
Correct |
19 ms |
74588 KB |
Output is correct |
3 |
Correct |
20 ms |
74588 KB |
Output is correct |
4 |
Correct |
20 ms |
74584 KB |
Output is correct |
5 |
Correct |
19 ms |
74780 KB |
Output is correct |
6 |
Correct |
19 ms |
74588 KB |
Output is correct |
7 |
Correct |
18 ms |
74824 KB |
Output is correct |
8 |
Correct |
19 ms |
74584 KB |
Output is correct |
9 |
Correct |
22 ms |
74588 KB |
Output is correct |
10 |
Correct |
19 ms |
74584 KB |
Output is correct |
11 |
Correct |
19 ms |
74764 KB |
Output is correct |
12 |
Correct |
19 ms |
74584 KB |
Output is correct |
13 |
Correct |
21 ms |
74588 KB |
Output is correct |
14 |
Correct |
20 ms |
74584 KB |
Output is correct |
15 |
Correct |
20 ms |
75096 KB |
Output is correct |
16 |
Correct |
19 ms |
74584 KB |
Output is correct |
17 |
Correct |
19 ms |
74840 KB |
Output is correct |
18 |
Correct |
19 ms |
74584 KB |
Output is correct |
19 |
Correct |
19 ms |
74584 KB |
Output is correct |
20 |
Correct |
20 ms |
74588 KB |
Output is correct |
21 |
Correct |
20 ms |
74584 KB |
Output is correct |
22 |
Correct |
19 ms |
74768 KB |
Output is correct |
23 |
Correct |
19 ms |
74584 KB |
Output is correct |
24 |
Correct |
20 ms |
74840 KB |
Output is correct |
25 |
Correct |
19 ms |
74584 KB |
Output is correct |
26 |
Correct |
25 ms |
75100 KB |
Output is correct |
27 |
Correct |
24 ms |
74844 KB |
Output is correct |
28 |
Correct |
26 ms |
75284 KB |
Output is correct |
29 |
Correct |
25 ms |
75352 KB |
Output is correct |
30 |
Correct |
31 ms |
74944 KB |
Output is correct |
31 |
Correct |
20 ms |
74584 KB |
Output is correct |
32 |
Correct |
23 ms |
75144 KB |
Output is correct |
33 |
Correct |
19 ms |
74776 KB |
Output is correct |
34 |
Correct |
25 ms |
74844 KB |
Output is correct |
35 |
Correct |
26 ms |
75088 KB |
Output is correct |
36 |
Correct |
25 ms |
74840 KB |
Output is correct |
37 |
Correct |
26 ms |
74988 KB |
Output is correct |
38 |
Correct |
20 ms |
74584 KB |
Output is correct |
39 |
Correct |
28 ms |
75096 KB |
Output is correct |
40 |
Correct |
26 ms |
74840 KB |
Output is correct |
41 |
Correct |
30 ms |
74960 KB |
Output is correct |
42 |
Correct |
24 ms |
75028 KB |
Output is correct |
43 |
Correct |
23 ms |
75096 KB |
Output is correct |
44 |
Correct |
20 ms |
74584 KB |
Output is correct |
45 |
Correct |
23 ms |
74896 KB |
Output is correct |
46 |
Incorrect |
25 ms |
74840 KB |
Output isn't correct |
47 |
Halted |
0 ms |
0 KB |
- |