求助,用入度算儿子数量70分
查看原帖
求助,用入度算儿子数量70分
251882
蒟蒻丁楼主2020/9/4 21:21

RT,很作死地使用入度算出儿子数量

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll int 
#define v1 q[i].to
using namespace std;
const ll N=4e6;
ll n,m,in[N],cnt,head[N],f[N],mid,l,r,ans;

struct tree_map{
	ll to,nxt;
}q[N];

void add(ll u,ll v){
	q[++cnt].to=v;
	q[cnt].nxt=head[u];
	head[u]=cnt;
	in[u]++;
}

void dfs(ll u,ll fa){
	ll sum=in[u]-1;
	for(ll i=head[u];~i;i=q[i].nxt){
		if(v1!=fa){
			dfs(v1,u);
			sum+=f[v1];
		}
	}
	f[u]=max(0,sum-mid);
}

int main(){
	memset(head,-1,sizeof head);
	scanf("%d",&n);
	for(ll i=1;i<n;i++){
		ll a1,a2;
		scanf("%d%d",&a1,&a2);
		add(a1,a2);
		add(a2,a1);
	}
	l=1,r=n-1;
	while(l<=r){
		mid=(l+r)/2;
		dfs(1,0);
		if(f[1]==0){
			ans=mid,r=mid-1;
		}
		else l=mid+1;
	}
	printf("%d",ans);
}
2020/9/4 21:21
加载中...