Submission #1174131

#TimeUsernameProblemLanguageResultExecution timeMemory
1174131WarinchaiPastiri (COI20_pastiri)C++20
0 / 100
275 ms38208 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...