社区讨论
求调 TLE on test 102
CF1009FDominant Indices参与者 4已保存回复 13
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @mkncgmba
- 此快照首次捕获于
- 2026/01/21 09:28 4 周前
- 此快照最后确认于
- 2026/01/24 15:55 4 周前
CPP
#include<bits/stdc++.h>
using namespace std;
char buf[1<<23],*p1=buf,*p2=buf,obuf[1<<23],*O=obuf;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
inline int read(){
int num=0,f=1;
char c=getc();
while(!isdigit(c)){if(c=='-')f=-1;c=getc();}
while(isdigit(c)){num=num*10+(c^48);c=getc();}
return num*f;
}
#define pii pair<int,int>
vector<int>e[1000005];
int dep[1000005],n,q,u,v,cnt[1000005],siz[1000005],son[1000005],Cnt,Dep;
int in[1000005],out[1000005],dfn,ans[1000005],fd[1000005];
inline void add(int x){int d=dep[x];cnt[d]++;if(cnt[d]>Cnt||cnt[d]==Cnt&&d<Dep) Cnt=cnt[d],Dep=d;}
inline void del(int x){cnt[dep[x]]--;}
void dfs1(int x,int fa){
siz[x]=1,in[x]=++dfn,fd[dfn]=x,dep[x]=dep[fa]+1;
for(auto v:e[x])
if(v!=fa){
dfs1(v,x),siz[x]+=siz[v];
if(!son[x]&&siz[v]>siz[son[x]]) son[x]=v;
}
out[x]=dfn;
}
void dfs2(int x,int fa,bool flg){
for(auto v:e[x]) if(v!=fa&&v!=son[x]) dfs2(v,x,0);
if(son[x]) dfs2(son[x],x,1);
for(auto &v:e[x]) if(v!=fa&&v!=son[x]) for(int i=in[v];i<=out[v];i++) add(fd[i]);
add(x),ans[x]=Dep-dep[x];
if(!flg){
for(int i=in[x];i<=out[x];i++) del(fd[i]);
Cnt=Dep=0;
}
}
signed main(){
n=read();
for(int i=2;i<=n;i++) u=read(),v=read(),e[u].push_back(v),e[v].push_back(u);
dfs1(1,0);
dfs2(1,0,0);
for(int i=1;i<=n;i++) printf("%d\n",ans[i]);
}
回复
共 13 条回复,欢迎继续交流。
正在加载回复...