RT,我写了一个非二分的方法,但是WA了两个点,求大佬指正,谢谢!
代码:
#include<bits/stdc++.h>
using namespace std;
#define N 300010
int n,head[N],cnt,ct,ru[N],dep[N],maxn=0;
struct Edge{
int v,next;
}e[N<<1];
inline void adde(int u,int v){
e[++cnt]=(Edge){v,head[u]};
head[u]=cnt;
}
inline int read(){
int x=0;char ch=getchar();
while(ch>'9'||ch<'0')ch=getchar();
while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x;
}
inline void dfs(int x,int fa,int zhi,int dep){
ct=(int)((zhi+ru[x]+dep-1)/(dep));
maxn=max(maxn,ct);
// cout<<ct<<endl;
for(register int i=head[x];i;i=e[i].next){
if(e[i].v!=fa)dfs(e[i].v,x,zhi+ru[x],dep+1);
}
return;
}
int main(){
n=read();
for(register int i=1;i<n;++i){
int x=read(),y=read();
adde(x,y);
adde(y,x);
++ru[x],++ru[y];
}
for(register int i=2;i<=n;++i)--ru[i];
dfs(1,0,0,1);
printf("%d\n",maxn);
return 0;
}