#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;}
新闻热点
疑难解答