一笔画问题
时间限制:3000 ms | 内存限制:65535 KB
难度:4
- 描述
-
zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。规定,所有的边都只能画一次,不能重复画。
#include <stdio.h> #include <string.h> int flag,fa[1005],n,rank[1005]; int find(int x)//查找并压缩路径 { if(fa[x]!=x) fa[x]=find(fa[x]); return fa[x]; } void uni(int x,int y)//树的层数 { if(rank[x]>=rank[y]) { fa[y]=x; rank[x]++; } else { rank[y]++; fa[x]=y; } } int main() { int ncase,num[1005],v; scanf("%d",&ncase); while(ncase--) { memset(fa,0,sizeof(fa)); memset(rank,0,sizeof(rank)); memset(num,0,sizeof(num)); scanf("%d %d",&n,&v); for(int i=1;i<=n;i++) fa[i]=i,rank[i]=0; for(int i=0;i<v;i++) { int a,b,x,y; scanf("%d %d",&a,&b); num[a]++,num[b]++; x=find(a),y=find(b); if(x!=y) uni(x,y); } int odd=0,sum=0; for(int i=1;i<=n;i++) { if(num[i]%2) odd++; if(fa[i]==i) sum++; } if(odd==0||odd==2&&sum==1)//odd=2时不是一个环,odd=2是个环,sum=1只有一个根 printf("Yes\n"); else printf("No\n"); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-08 06:55:19