社区讨论

求调 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 条回复,欢迎继续交流。

正在加载回复...