80分 wa 6,9两点求助
查看原帖
80分 wa 6,9两点求助
93485
AzukaVictor楼主2022/2/20 16:27

rt,代码如下

#include<bits/stdc++.h>
using namespace std;
long long n,cnt,m,dp[1000005],f[1000005],h[1000005],d[1000005],ans;
struct edge
{
	int to;
	int next;
	int val;
}e[2000005];
void addedge(int u,int v,int w)
{
	cnt++;
	e[cnt].to=v;
	e[cnt].val=w;
	e[cnt].next=h[u];
	h[u]=cnt;
}
void dfs1(int x,int fa)
{
	dp[x]=1;
	d[x]=d[fa]+1;
	for(int i=h[x];i;i=e[i].next)
	{
		if(e[i].to==fa) continue;
		dfs1(e[i].to,x);
		dp[x]+=dp[e[i].to];
	}
}
void dfs2(int x,int fa)
{
	for(int i=h[x];i;i=e[i].next)
	{
		if(e[i].to==fa) continue;
		f[e[i].to]=f[x]-2*dp[e[i].to]+n;
		dfs2(e[i].to,x); 
	}
}
int main()
{
	freopen("P3478_6.in","r",stdin);
	freopen("P3478_6.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n-1;i++)
	{
		int a,b,c;
		cin>>a>>b;
		addedge(a,b,1);
		addedge(b,a,1);
	}
	dfs1(1,0);
	for(int i=1;i<=n;i++)
	{
		f[1]+=d[i];
	}
	dfs2(1,0);
	int maxn=0;
	for(int i=1;i<=n;i++)
	{
		if(maxn<f[i])
		{
			maxn=f[i];
			ans=i;
		}
	}
	cout<<ans<<endl;
	return 0;
}
2022/2/20 16:27
加载中...