#include<cstdio>//图联通 并且有2个或者没有奇数度节点,没有的是欧拉回路
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1e6+10;
int bin[maxn];
int finds(int x)
{
int flag=x,j;
while(x!=bin[x])
x=bin[x];
while(bin[flag]!=x)
{
j=flag;
flag=bin[flag];
bin[j]=x;
}
return x;
}
void merger(int a,int b)
{
bin[finds(a)]=bin[finds(b)];
}
int x[maxn];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(x,0,sizeof(x));
for(int i=0; i<m; i++)
{
int a,b;
scanf("%d%d",&a,&b);
x[a]++;
x[b]++;
merger(a,b);
}
int flag=0;
for(int i=2; i<=n; i++)//用并查集判读图的联通性
if(finds[1]!=finds[i])
{
flag=1;
break;
}
int ans=0;
for(int i=1; i<=n; i++)//判断结点的度数
if(x[i]%2)
ans++;
if(ans==0||ans==2||flag==0)//存在欧拉路
printf("Full\n");
else
printf("Part\n");
}
}
无向图欧拉路的判定
最新推荐文章于 2021-12-09 20:42:51 发布