首页 > 学院 > 开发设计 > 正文

1021. Deepest Root (25)

2019-11-08 02:01:01
字体:
来源:转载
供稿:网友
#include <cstdio>#include <algorithm>#include <vector>#include <cstring>using namespace std;const int maxn = 10010;int deepest = 0;vector<int> city[maxn];int deep_r[maxn], p = 0;bool visit[maxn] = {false};bool visit1[maxn] = {false};void DFS(int root) {	visit[root] = true;	for (int i = 0; i < city[root].size(); i++) {		if (visit[city[root][i]]) continue;		DFS(city[root][i]); 	}}void DFS(int root, int level) {	visit[root] = true;	bool flag = false;	for (int i = 0; i < city[root].size(); i++) {		if (visit[city[root][i]]) continue;		DFS(city[root][i], level + 1);		flag = true;	}	if (flag == false) {		if (level > deepest) {			deepest = level;			p = 0;			memset(visit1, false, sizeof(visit1));		}		if (level == deepest && visit1[root] == false) {			deep_r[p++] = root;			visit1[root] = true;		}	}}int main() {	int n;	scanf("%d", &n);	int c1, c2;	for (int i = 1; i < n; i++) {		scanf("%d%d", &c1, &c2);		city[c1].push_back(c2);		city[c2].push_back(c1);	}		int block = 0;	for (int i = 1; i <= n; i++) {		if (visit[i] == false) {			block++;			DFS(i);		}	}		if (block > 1) {		PRintf("Error: %d components/n", block);	} else {		for (int i = 1; i <= n; i++) {			memset(visit, false, sizeof(visit));			DFS(i, 0);		}		sort(deep_r, deep_r + p);		for (int i = 0; i != p; i++) {			printf("%d/n", deep_r[i]);		}	}	return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表