Untitled

 avatar
user_5668965
c_cpp
a year ago
683 B
6
Indexable
#include<bits/stdc++.h>
typedef long long ll;
const int N=2e5+5;
int n,k;
ll ans;
int tot_edge;
int head[N],next[N<<1],to[N<<1];
int sz[N];
void link(int u,int v){
	++tot_edge;
	to[tot_edge]=v;
	next[tot_edge]=head[u];
	head[u]=tot_edge;
}
void dfs(int u,int fa){
	for(int i=head[u];i;i=next[i]){
		int v=to[i];
		if(v==fa){
			continue;
		}
		dfs(v,u);
		sz[u]+=sz[v];
	}
	ans+=std::min(sz[u],2*k-sz[u]);
}
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=k*2;++i){
		int u;
		scanf("%d",&u);
		++sz[u];
	}
	for(int i=1;i<n;++i){
		int u,v;
		scanf("%d%d",&u,&v);
		link(u,v);
		link(v,u);
	}
	dfs(1,0);
	printf("%I64d\n",ans);
	return 0;
}
Editor is loading...
Leave a Comment