Submission #977620

#TimeUsernameProblemLanguageResultExecution timeMemory
977620sleepntsheepUnique Cities (JOI19_ho_t5)C11
100 / 100
162 ms31292 KiB
#include<stdio.h> #include<string.h> #define N 200000 #define N_ (N+1) int n, m, c[N_], head[N_], vv[N_<<1], nxt[N_<<1], i, u, v, far,dd[N_], rt, orz[N_], oo, hh[N_], longc[N_][2], fr[N_], dist, ans[N_]; void link(int u,int v) { static int i=1; nxt[i]=head[u]; vv[i]=v; head[u]=i++; } void dfs0(int u,int p) { dd[u]=dd[p]+1; if(dd[u]>dd[far])far=u; for(int j=head[u];j;j=nxt[j])if(vv[j]-p)dfs0(vv[j],u); } void dfs1(int u,int p) { dd[u]=dd[p]+1; hh[u]=0; for(int j=head[u];j;j=nxt[j])if(vv[j]-p) { dfs1(vv[j],u); if(hh[vv[j]]>hh[longc[u][0]]) longc[u][1]=longc[u][0],longc[u][0]=vv[j]; else if(hh[vv[j]]>hh[longc[u][1]]) longc[u][1]=vv[j]; } hh[u]=hh[longc[u][0]]+1; } void del(int x) { dist-=!--fr[x]; } void ins(int x) { dist+=!fr[x]++; } void dfs2(int u,int p) { if(p)ins(c[p]),orz[++oo]=p; if(longc[u][0]) { while(oo&&dd[u]-dd[orz[oo]]<=hh[longc[u][1]]) del(c[orz[oo--]]); dfs2(longc[u][0],u); } while(oo&&dd[u]-dd[orz[oo]]<=hh[longc[u][0]]) del(c[orz[oo--]]); for(int j=head[u];j;j=nxt[j])if(vv[j]-p&&vv[j]-longc[u][0]) dfs2(vv[j],u); if(dist>ans[u])ans[u]=dist; if(orz[oo]==p)del(c[orz[oo--]]); } void solve(int u) { dfs0(u,0); rt=far; dfs1(rt,0); dfs2(rt,0); oo=dist=0; memset(longc,0,sizeof longc); memset(fr,0,sizeof fr); } int main() { scanf("%d%d",&n,&m); for(i=1;i<n;++i)scanf("%d%d",&u,&v),link(u,v),link(v,u); for(i=1;i<=n;++i)scanf("%d",c+i); solve(1); solve(rt); for(i=1;i<=n;++i)printf("%d\n",ans[i]); }

Compilation message (stderr)

joi2019_ho_t5.c: In function 'main':
joi2019_ho_t5.c:74:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   74 |     scanf("%d%d",&n,&m);
      |     ^~~~~~~~~~~~~~~~~~~
joi2019_ho_t5.c:75:21: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   75 |     for(i=1;i<n;++i)scanf("%d%d",&u,&v),link(u,v),link(v,u);
      |                     ^~~~~~~~~~~~~~~~~~~
joi2019_ho_t5.c:76:22: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   76 |     for(i=1;i<=n;++i)scanf("%d",c+i);
      |                      ^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...