Submission #321359

#TimeUsernameProblemLanguageResultExecution timeMemory
321359kshitij_sodaniPastiri (COI20_pastiri)C++14
23 / 100
1062 ms76408 KiB
//#pragma GCC optimize("Ofast,unroll-loops") #include <bits/stdc++.h> using namespace std; typedef long long llo; #define mp make_pair #define pb push_back #define a first #define b second //#define endl '\n' int n,k; vector<int> adj[500001]; vector<int> ans; int lev[500001]; int par[500001]; int vis[500001]; int vis2[500001]; int mi[500001]; void dfs(int no,int par2=-1,int levv=0){ lev[no]=levv; par[no]=par2; for(auto j:adj[no]){ if(j!=par2){ dfs(j,no,levv+1); } } } int cot=-1; int dist[2001][2001]; void dfs2(int no,int par2=-1,int levv=0){ if(vis2[no]){ mi[cot]=min(mi[cot],levv); } dist[cot][no]=levv; for(auto j:adj[no]){ if(j!=par2){ dfs2(j,no,levv+1); } } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n>>k; for(int i=0;i<n-1;i++){ int aa,bb; cin>>aa>>bb; aa--; bb--; adj[aa].pb(bb); adj[bb].pb(aa); } vector<int> ss(k); for(int i=0;i<k;i++){ cin>>ss[i]; ss[i]--; vis2[ss[i]]=1; } for(int i=0;i<n;i++){ mi[i]=n; } for(int i=0;i<n;i++){ cot=i; dfs2(i); } dfs(0); vector<pair<int,int>> tt; for(auto j:ss){ tt.pb({lev[j],j}); } sort(tt.begin(),tt.end()); while(tt.size()){ if(vis[tt.back().b]){ tt.pop_back(); continue; } int x=tt.back().b; int cur=par[x]; int pp=x; while(cur!=-1){ if(dist[cur][x]==mi[cur]){ pp=cur; cur=par[cur]; continue; } break; } for(int i=0;i<k;i++){ if(dist[pp][ss[i]]==mi[pp]){ vis[ss[i]]=1; } } ans.pb(pp); tt.pop_back(); } cout<<ans.size()<<endl; for(auto j:ans){ cout<<j+1<<" "; } cout<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...