#include<bits/stdc++.h>
using namespace std;
vector<int>adj[500005];
int mn[500005];
int p[500005];
int sz[500005];
int cant[500005];
int fp(int u){
return p[u]==u?u:p[u]=fp(p[u]);
}
void un(int a,int b){
sz[fp(a)]+=sz[fp(b)];
p[fp(b)]=fp(a);
}
int inf=1e9;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int n,k;cin>>n>>k;
for(int i=0;i<n-1;i++){
int a,b;cin>>a>>b;
adj[a].push_back(b);
adj[b].push_back(a);
}
for(int i=1;i<=n;i++)mn[i]=inf,p[i]=i;
queue<pair<int,pair<int,int>>>q;
for(int i=0;i<k;i++){
int x;cin>>x;
sz[x]++;
q.push({x,{x,0}});
}
while(!q.empty()){
int u=q.front().first;
int dis=q.front().second.second;
int prv=q.front().second.first;
q.pop();
if(dis>mn[u])continue;
if(dis<=mn[u]){
if((sz[fp(prv)]<=1||(sz[fp(prv)]>=2&&fp(prv)==prv))&&(sz[fp(u)]<=1||(sz[fp(u)]>=2&&fp(u)==u)))un(u,prv);
if(dis<mn[u]){
for(auto x:adj[u])if(dis<mn[x])q.push({x,{u,dis+1}});
}
}
mn[u]=min(mn[u],dis);
}
vector<int>ans;
int cnt=0;
for(int i=1;i<=n;i++)if(fp(i)==i)ans.push_back(i),cnt++;
cout<<cnt<<"\n";
for(auto x:ans)cout<<x<<" ";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |