https://www.patest.cn/contests/gplt/L3-008
一开始误以为是并查集,但要注意到题目中要求的是相对x最远的y,此时应该想到使用BFS。
#include <bits/stdc++.h>
using namespace std;
const int maxn=10005;
int n,m,k;
vector <int> G[maxn];
bool vis[maxn];
struct Node{
int num;
int step;
};
int BFS(int st){
int max_step=0;
int num=0;
memset(vis,0,sizeof(vis));
queue <Node> q;
vis[st]=1;
q.push(Node{st,0});
while (!q.empty()){
Node Now=q.front();
q.pop();
if (Now.step>max_step){
max_step=Now.step;
num=Now.num;
}
for (int i=0;i<G[Now.num].size();i++){
Node Tmp;
Tmp.num=G[Now.num][i];
Tmp.step=Now.step+1;
if (!vis[Tmp.num]){
vis[Tmp.num]=1;
q.push(Tmp);
}
}
}
return num;
}
int main(){
cin >> n >> m >> k;
for (int i=0;i<m;i++){
int x,y;
cin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
for (int i=0;i<k;i++){
int x;
cin >> x;
cout << BFS(x) << endl;
}
}