无向图存在欧拉回路的充要条件
当且仅当这个图的所有顶点的度数是偶数,且该图是连通图。
无向图含有欧拉通路的充要条件
当且仅当这个图有零个或两个奇数度的结点,且该图是连通图。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int head[1010],tol,pre[1010],fa[1010];
int n,m;
int Find(int x){
int r=x;
while(fa[r]!=r)
r=fa[r];
int i=x,j;
while(fa[i]!=r){
j=fa[i];
fa[i]=r;
i=j;
}
return r;
}
void init(){
for(int i=1;i<=n;i++) fa[i]=i;
memset(pre,0,sizeof(pre));
}
bool Judge(){
int num=0;
for(int i=1;i<=n;i++){
if(pre[i]&1)
num++;
if(num>2) return false;
}
if(num!=2 && num!=0) return false;
num=0;
for(int i=1;i<=n;i++){
if(fa[i]==i) num++;
if(num>1) return false;
}
return true;
}
int main()
{
int T,u,v;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
init();
while(m--){
scanf("%d%d",&u,&v);
int x=Find(u);
int y=Find(v);
if(fa[x]!=y) fa[x]=y;
pre[u]++;
pre[v]++;
}
if(!Judge()){
puts("No");
continue;
}
puts("Yes");
}
return 0;
}