题目:
思路分析:
读懂题目就是一个求最短dijsktra+最长路的模型
代码实现:
/*
*@Author: GuoJinlong
*@Language: C++
*/
//#include <bits/stdc++.h>
/*
* __----~~~~~~~~~~~------___
* . . ~~//====...... __--~ ~~
* -. \_|// |||\\ ~~~~~~::::... /~
* ___-==_ _-~o~ \/ ||| \\ _/~~-
* __---~~~.==~||\=_ -_--~/_-~|- |\\ \\ _/~
* _-~~ .=~ | \\-_ '-~7 /- / || \ /
* .~ .~ | \\ -_ / /- / || \ /
* / ____ / | \\ ~-_/ /|- _/ .|| \ /
* |~~ ~~|--~~~~--_ \ ~==-/ | \~--===~~ .\
* ' ~-| /| |-~\~~ __--~~
* |-~~-_/ | | ~\_ _-~ /\
* / \ \__ \/~ \__
* _--~ _/ | .-~~____--~-/ ~~==.
* ((->/~ '.|||' -_| ~~-/ , . _||
* -_ ~\ ~~---l__i__i__i--~~_/
* _-~-__ ~) \--______________--~~
* //.-~~~-~_--~- |-------~~~~~~~~
* //.-~~~--\
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* 神兽保佑 永无BUG
*/
const int MAX=10010;
struct node{
int to,w;
};
int n,m,k;
vector<node>v[MAX];
int dist[MAX];
int vis[MAX];
typedef pair<int,int> p;
void dij(int s){
mms(vis,0);
priority_queue<p,vector<p>,greater<p>>q;
mms(dist,INF);
while (!q.empty()) {
q.pop();
}
q.push(p(0,s));
dist[s]=0;
while (!q.empty()) {
p p1=q.top();
q.pop();
int u=p1.second;
if(vis[u]) continue;
vis[u]=1;
for(int i=0;i<v[u].size();i++){
int ne=v[u][i].to;
int w=v[u][i].w;
if(dist[ne]>dist[u]+w&&!vis[ne]){
dist[ne]=dist[u]+w;
q.push({dist[ne],ne});
}
}
}
}
int main(){
cin>>n>>m>>k;
mms(dist,INF);
while (m--) {
int x,y;
cin>>x>>y;
v[x].push_back({y,1});
v[y].push_back({x,1});
}
while (k--) {
int x;
cin>>x;
dij(x);
int pos=0;
int ans=0;
for(int i=1;i<=n;i++){
if(ans<dist[i]&&dist[i]<=n){
ans=dist[i];
pos=i;
}
}
cout<<pos<<endl;
}
}