bzoj 3391: [Usaco2004 Dec]Tree Cutting網絡破壞

題目鏈接


【想說的話】

果然我還是比較喜歡樹


【題解】

dfs一遍計算出以1爲根,每個點的子樹節點和,最大的子樹節點數

然後1到n掃一遍,注意由那個點的父親組成的子樹,n-sum[x]就行了


【代碼】

#include<bits/stdc++.h>

#define MAXN 10010

typedef long long ll;

using namespace std;

inline int rd(){
	int x=0,y=1;char c=getchar();
	while(c<'0' || c>'9'){if(c=='-')y=-y;c=getchar();}
	while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
	return x*y;
}

int n;
vector<int>v[MAXN];
int sum[MAXN],Max[MAXN];

void dfs(int x,int fa){
	sum[x]=1;
	for(int i=0; i<v[x].size(); i++){
		int to=v[x][i];
		if(to==fa)continue;
		dfs(to,x);
		sum[x]+=sum[to];
		Max[x]=max(Max[x],sum[to]);
	}
}

int main(){
	n=rd();
	for(int i=1; i<n; i++){
		int x=rd(),y=rd();
		v[x].push_back(y);
		v[y].push_back(x);
	}
	dfs(1,0);
	bool f=false;
	for(int i=1; i<=n; i++){
		if(max(Max[i],n-sum[i])<=n/2){
			f=true;
			printf("%d\n",i);
		}
	}
	if(!f)puts("NONE");
	
	return 0;
}


發佈了128 篇原創文章 · 獲贊 72 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章