#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;
}
1021. Deepest Root (25)
最新推荐文章于 2022-03-06 17:13:01 发布