无向图欧拉路的判定

来源:互联网 发布:知彼客服 编辑:程序博客网 时间:2024/06/05 16:28
#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");    }}

0 0
原创粉丝点击