Submission #919383

#TimeUsernameProblemLanguageResultExecution timeMemory
919383imarnMergers (JOI19_mergers)C++14
100 / 100
1384 ms193548 KiB
#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define f first #define s second #define pb push_back #define all(x) x.begin(),x.end() #define vi vector<int> #define vvi vector<vi> #define vp vector<pii> using namespace std; const int N=5e5+5; vector<int>g[N],gr[N]; set<int>gg[N]; int dep[N],up[N][21],pr[N],d[N],t=0; int get(int r){ return pr[r]==r?r:pr[r]=get(pr[r]); } void dfs(int u,int p,int l){ dep[u]=l;up[u][0]=p;d[u]=++t; for(int i=1;i<=20;i++)up[u][i]=up[up[u][i-1]][i-1]; for(auto v:g[u]){ if(v==p)continue; dfs(v,u,l+1); } } int qr(int a,int b){ if(dep[a]>dep[b])swap(a,b); for(int i=20;i>=0;i--)if(dep[b]-(1<<i)>=dep[a])b=up[b][i]; if(a==b)return a; for(int i=20;i>=0;i--)if(up[a][i]!=up[b][i])a=up[a][i],b=up[b][i]; return up[a][0]; } bool cmp(int a,int b){ return d[a]<d[b]; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); int n,k;cin>>n>>k;iota(pr,pr+n+1,0); for(int i=1;i<=n-1;i++){ int u,v;cin>>u>>v;g[u].pb(v);g[v].pb(u); }dfs(1,1,0); for(int i=1,x;i<=n;i++)cin>>x,gr[x].pb(i); for(int i=1;i<=k;i++){ sort(gr[i].begin(),gr[i].end(),cmp); for(int j=1;j<gr[i].size();j++){ int lca=qr(gr[i][j-1],gr[i][j]); int u=gr[i][j-1],v=gr[i][j]; while(get(u)!=get(lca)){ int uu=up[get(u)][0]; pr[get(u)]=get(uu);u=uu; } while(get(v)!=get(lca)){ int vv=up[get(v)][0]; pr[get(v)]=get(vv);v=vv; } } } for(int i=1;i<=n;i++){ for(auto it : g[i]){ if(get(it)==get(i))continue; gg[get(it)].insert(get(i)); gg[get(i)].insert(get(it)); } }int ct=0; for(int i=1;i<=n;i++)if(gg[i].size()==1)ct++; cout<<(ct+1)/2; }

Compilation message (stderr)

mergers.cpp: In function 'int main()':
mergers.cpp:47:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |         for(int j=1;j<gr[i].size();j++){
      |                     ~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...