前言
参考题解
//
// Created by niko on 2020/9/19.
//
//剩余时间:19:44
#include <bits/stdc++.h>
using namespace std;
vector<pair<int,int>> edge;//存储每条边
unordered_map<int,int> degree;//子图中每个结点的度数
//排序规则
bool cmp(int a,int b){
if(degree[a]!=degree[b])return degree[a]>degree[b];
return a<b;
}
int main(){
//加速cin
ios::sync_with_stdio(false);
cin.tie(0);
int n,m,k,a,b;
cin>>n>>m;
while (m--){
cin>>a>>b;
edge.push_back({ a,b});
}
while (cin>>k&&k!=0){
degree.clear();
vector<int> v(k);//存储子图中每个结点
unordered_map<int,bool> exist;//是否存在
for(int i=0;i<k;i++){
cin>>v[i];
exist[v[i]]= true;
}
//核心,遍历每条边,若子图中存在该边,则两端的结点的度都加1
for(auto it:edge){
if(exist[it.first]&&exist[it.second]){
degree[it.first]++;
degree[it.second]++;
}
}
sort(v.begin(),v.end(),cmp);
printf("%d %d %d\n",v[0],v[1],v[2]);
}
return 0;
}