fc了20多分钟都查不出锅
自己的代码O(n),80pts
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+5;
#define ll long long
#define pii pair<int,int>
const int mod = 1e9+7;
inline int read() {
int x=0,f=1;char C=getchar();
while(!isdigit(C)){if(C=='-') f=-1;C=getchar();}
while(isdigit(C)) x=x*10+(C^48),C=getchar();
return x*f;
}
inline void write(int x){
if(x<0){putchar('-'); x=-x;}
if(x>9) write(x/10);
putchar(x%10+'0');
}
int n,m,u,v,f[N],de[N],ans;
vector<int>e[N];
void dfs0(int u,int fa)
{
for(auto v:e[u])
{
if(v==fa)continue;
de[v]=de[u]+1;
dfs0(v,u);
}
}
void dfs(int u,int fa)
{
ans=max(ans,f[u]/de[u]+(f[u]%de[u]!=0));
for(auto v:e[u])
{
if(v==fa)continue;
f[v]=f[u]+(int)e[v].size()-1;
dfs(v,u);
}
}
signed main()
{
n=read();
for(int i=1;i<n;i++)
{
u=read();v=read();
e[u].push_back(v);
e[v].push_back(u);
}
de[1]=1;
dfs0(1,0);
f[1]=(int)e[1].size();
dfs(1,0);
cout<<ans<<endl;
//for(int i=1;i<=n;i++)
// cout<<f[i]<<" "<<de[i]<<endl;
return 0;
}
根据题解O(nlogn)二分答案思路写的代码,100pts
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+5;
#define ll long long
#define pii pair<int,int>
const int mod = 1e9+7;
inline int read() {
int x=0,f=1;char C=getchar();
while(!isdigit(C)){if(C=='-') f=-1;C=getchar();}
while(isdigit(C)) x=x*10+(C^48),C=getchar();
return x*f;
}
inline void write(int x){
if(x<0){putchar('-'); x=-x;}
if(x>9) write(x/10);
putchar(x%10+'0');
}
int n,m,u,v,f[N],de[N],ans;
vector<int>e[N];
void dfs0(int u,int fa)
{
for(auto v:e[u])
{
if(v==fa)continue;
de[v]=de[u]+1;
dfs0(v,u);
}
}
void dfs(int u,int fa)
{
ans=max(ans,f[u]/de[u]+(f[u]%de[u]!=0));
for(auto v:e[u])
{
if(v==fa)continue;
f[v]=f[u]+(int)e[v].size()-1;
dfs(v,u);
}
}
signed main()
{
n=read();
for(int i=1;i<n;i++)
{
u=read();v=read();
e[u].push_back(v);
e[v].push_back(u);
}
de[1]=1;
dfs0(1,0);
f[1]=(int)e[1].size();
dfs(1,0);
cout<<ans<<endl;
//for(int i=1;i<=n;i++)
// cout<<f[i]<<" "<<endl;
return 0;
}