题意:
解法:
染色,先任意将一个点染成黑色,然后将所有相邻点染成白色.
然后找到一个与白色相邻,且周围没有黑色的点染成黑色,这个点的相邻点染成白色,
重复操作即可,这样一定有解.
如果图不连通则无解.
code:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=3e5+5;
vector<int>g[maxm];
int c[maxm];
int n,m;
void dfs(int x){
int f=1;
for(int v:g[x]){
if(c[v]==1){
f=-1;
break;
}
}
c[x]=f;
for(int v:g[x]){
if(!c[v]){
dfs(v);
}
}
}
void solve(){
cin>>n>>m;
for(int i=1;i<=n;i++)c[i]=0;
for(int i=1;i<=n;i++)g[i].clear();
for(int i=1;i<=m;i++){
int a,b;cin>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
int cnt=0;
for(int i=1;i<=n;i++){
if(!c[i]){
cnt++;
if(cnt>1)break;
c[i]=1;
dfs(i);
}
}
if(cnt>1){
cout<<"NO"<<endl;
return ;
}
cout<<"YES"<<endl;
vector<int>ans;
for(int i=1;i<=n;i++){
if(c[i]==1){
ans.push_back(i);
}
}
cout<<ans.size()<<endl;
for(auto i:ans){
cout<<i<<' ';
}
cout<<endl;
}
signed main(){
ios::sync_with_stdio(0);
int T;cin>>T;
while(T--){
solve();
}
return 0;
}