如果出现环的时候 u和v颜色不同 它就是个偶环 如果颜色相同 它就为奇环
再有 有过两个奇环套在一起它也是个偶环(非常巧妙
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
#define pb push_back
int n,m;
vector<int>g[N];
int col[N];
int pre[N];
int belong[N];
bool odd,even;
int cnt;
void dfs(int u,int fa)
{
for(auto v:g[u])
{
if(v==fa)continue;
if(col[v]==col[u])
{
cnt++;
odd=true;
int t=v;
while(!even)
{
if(!belong[t])
{
even=true;
break;
}
belong[t]=cnt;
t=pre[t];
if(t==u||t==-1)break;
}
}
if(col[v]==3-col[u])
{
even=true;
}
if(!col[v])
{
col[v]=3-col[u];
pre[v]=u;
dfs(v,u);
}
}
}
void solve()
{
memset(col,0,sizeof(col));
memset(belong,0,sizeof(belong));
cin>>n>>m;
odd=0;
even=0;
cnt=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].pb(b);
g[b].pb(a);
}
for(int i=1;i<=n;i++)
{
if(!col[i])
{
pre[i]=-1;
col[i]=1;
dfs(i,-1);
}
}
printf("%s\n", odd ? "YES" : "NO");
printf("%s\n", even ? "YES" : "NO");
}
int main()
{
int _;
cin>>_;
while(_--)
{
solve();
}
return 0;
}