题目链接:Codeforces - Cover it!
感觉这道题应该是属于随便做都能AC的那种。
我们直接对每个点黑白染色,取一个数量少的点输出即可。奇环是没有影响的。
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=2e5+10;
int n,m,col[N],cnt[2],mark;
vector<int> g[N];
inline void add(int a,int b){g[a].push_back(b),g[b].push_back(a);}
void dfs(int x,int co){
col[x]=co; cnt[co]++;
for(auto to:g[x]) if(col[to]==-1) dfs(to,co^1);
}
inline void solve(){
scanf("%d %d",&n,&m); cnt[0]=cnt[1]=0;
for(int i=1;i<=n;i++) col[i]=-1,g[i].clear();
for(int i=1,a,b;i<=m;i++) scanf("%d %d",&a,&b),add(a,b);
dfs(1,1);
if(cnt[0]<=cnt[1]) mark=0;
else mark=1;
printf("%d\n",cnt[mark]);
for(int i=1;i<=n;i++) if(col[i]==mark) printf("%d ",i);
puts("");
}
signed main(){
int T; cin>>T;
while(T--) solve();
return 0;
}