萌新WA第二点求助
  • 板块P1395 会议
  • 楼主RuntimeErr
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/12/20 15:05
  • 上次更新2023/11/5 05:52:59
查看原帖
萌新WA第二点求助
339846
RuntimeErr楼主2020/12/20 15:05

调了30min愣是没调出来。。。

include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
const int N=5e4+100,INF=0x7ffffff;

vector<int>edge[N];
int n,minn=INF,rt,f[N],size[N],dep[N];

int getsize(int u,int fa,int sz){
	size[u]=1;dep[u]=sz;
	for(int i=0;i<edge[u].size();i++){
		int v=edge[u][i]; 
		if(v==fa)continue;
		size[u]+=getsize(v,u,sz+1);
	}
	return size[u];
}
void dp(int u,int fa){
	for(int i=0;i<edge[u].size();i++){
		int v=edge[u][i];
		if(v==fa)continue;
		f[v]=f[u]+n-size[v]-size[v];
		dp(v,u);
	}
	return;
}
int main(){
	scanf("%d",&n);
	int x,y;
	for(int i=1;i<n;i++){
		scanf("%d %d",&x,&y);
		edge[x].push_back(y);
		edge[y].push_back(x);
	}
	getsize(1,0,0);
	for(int i=1;i<=n;i++){
		f[1]+=dep[i];
	}
	dp(1,0);
	for(int i=1;i<=n;i++){
		if(f[i]<minn){
			minn=f[i],rt=i;
		}
	}
	printf("%d %d",rt,minn);
	return 0;
} 
2020/12/20 15:05
加载中...