今天刚学的树,样例输出是3 4
查看原帖
今天刚学的树,样例输出是3 4
579489
Vigilant_Yaksha楼主2022/10/2 16:29
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<iomanip>
#include<queue>
#include<list>
#include<math.h>
#include<cctype>
#include<map>
#include<stack>
#define maxn 100010
using namespace std;
typedef long long ll;
typedef unsigned long wf;
typedef unsigned int u32;
typedef unsigned long long u64;
int f[maxn],size[maxn],head[maxn],dep[maxn];
int n,center,sum=0;
vector<int> G[maxn];
queue<int> q;
void getcenter(int now,int father){
	size[now]=1;
	f[now]=0;
	for(int i=0;i<G[now].size();i++){
		int v=G[now][i];
		if(v==father)continue;
		getcenter(v,now);
		size[now]+=size[v];
		f[now]=max(f[now],size[v]);
		if(f[now]<f[center] || (f[now]==f[center])&&now<center)
		center=now;
	}
}
void bfs(){
	q.push(center);
	while(!q.empty()){
	int u=q.front();
	q.pop();
	for(int i=0;i<G[u].size();i++){
		int v=G[u][i];
		if(dep[v]||v==center)continue;
		dep[v]=dep[u]+1;
		sum+=dep[v];
		q.push(v); 
		} 
	}	
}
int main(){
	cin>>n;
	for(int i=1;i<n;i++){
		int u,v;
		cin>>u>>v;
		G[u].push_back(v);
		G[v].push_back(u);  
	}
	center=0;f[0]=maxn*100;
	getcenter(1,0);
	bfs();
	cout<<center-1<<" "<<sum;
    return 0;
}
2022/10/2 16:29
加载中...