#include<iostream>//AC,采用的bfs,导致一开始内存超限
#include<set>//bfs与dfs的区别https://blog.csdn.net/yueguangmuyu/article/details/100046125
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f
const int maxn = 1e4 + 10;
int n, G[maxn][maxn] = { {} }, R[maxn] = { 0 }, vis[maxn];
set<int> s;
struct node { int v, h; };
void bfs(vector<int>& ans, int x) {
fill(vis, vis + maxn, 0);
queue<node> q;
q.push({ x,0 });
int hMax = -1;
while (!q.empty()) {
node t = q.front();
R[t.v] = 1, vis[t.v] = 1;
if (t.h > hMax) {
ans.clear();
ans.push_back(t.v);
hMax = t.h;
}
else if (t.h == hMax) { ans.push_back(t.v); }
q.pop();
for (int i = 1; i <= n; i++) {
if (G[t.v][i] && vis[i] == 0) {
q.push({ i,t.h + 1 });
}
}
}
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int a, b;
scanf("%d%d", &a, &b);
G[a][b] = G[b][a] = 1;
}
vector<int> ans, temp;
bfs(ans, 1);
bfs(temp, ans[0]);
for (int i = 0; i < ans.size(); i++) { s.insert(ans[i]); }
for (int i = 0; i < temp.size(); i++) { s.insert(temp[i]); }
int cnt = 1, flag = 0;
for (int i = 1; i <= n; i++) {
if (R[i] == 0) {
cnt++;
bfs(ans, i);
}
}
if (cnt == 1) { for (auto it : s) { printf("%d\n", it); } }
else { printf("Error: %d components", cnt); }
return 0;
}
1021 Deepest Root (25分) 采用BFS
最新推荐文章于 2023-09-05 09:00:00 发布