具体各个函数的作用,各个数组的作用,提供代码和题目
#include <bits/stdc++.h>
using namespace std;
const int N = 1E5+5,M = 2E5+10;
int h[N],ne[M],e[M],mark[N];
int n,m,idx;
void add(int a,int b)
{
e[idx]=b;
ne[idx]=h[a];
h[a]=idx++;
}
int dfs(int u,int fa)
{
int sum=0;
for(int i=h[u];~i;i=ne[i])
{
int j=e[i];
if(j==fa) continue;
int t=dfs(j,u);
if(t>0)
sum+=t+2;
else if(mark[j]>0)
sum+=2;
}
return sum;
}
int main()
{
int a,b,y;
memset(h,-1,sizeof(h)); //初始化h数组都为-1
cin>>n>>m;
for(int i=1;i<=n-1;i++)
{
cin>>a>>b;
add(a,b);
add(b,a);
}
for(int i=1;i<=m;i++)
{
cin>>y;
mark[y]++;
}
printf("%d",dfs(1,-1));
return 0;
}