ZOJ 3321 Circle(并查集)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3321
题意:
给你一个n节点m条边的无向图,问你该图是否正好是一个环?
分析:
无向图是一个简单环 充要条件是 所以节点的度数==2且图连通.
所以我们只需要记录每个节点的度且用并查集判断每个节点分别属于哪些连通分量即可.
AC代码:
#include<cstdio>
using namespace std;
const int maxn=100+5;
int degree[maxn];
int fa[maxn];
int findset(int x)
{
return fa[x]==-1?x:fa[x]=findset(fa[x]);
}
void bind(int i,int j)
{
int fi=findset(i);
int fj=findset(j);
if(fi!=fj)
{
fa[fi]=fj;
}
}
bool ok(int n)
{
for(int i=1;i<=n;++i)
if(degree[i]!=2) return false;
int root=fa[1]==-1?1:fa[1];
for(int i=2;i<=n;++i)
if(findset(i)!=root) return false;
return true;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==2)
{
for(int i=1;i<=n;++i)
{
degree[i]=0;
fa[i]=-1;
}
while(m--)
{
int u,v;
scanf("%d%d",&u,&v);
++degree[u];
++degree[v];
bind(u,v);
}
printf("%s\n",ok(n)?"YES":"NO");
}
return 0;
}
分享到:
相关推荐
ZOJ解题报告ZOJ解题报告ZOJ解题报告ZOJ解题报告
zoj题目简单归类zoj题目简单归类zoj题目简单归类
acm中zoj1002的可运行C++程序
包含了zoj700多道题目的源代码,在做题时可以参考
Problem Arrangement zoj 3777
ZOJ题目答案源码
一个非常非常非常非常实用的zoj结题代码
ZOJ1805代码
zoj 1003 c语言的,要写这么多描述吗。。
学习ACM程序设计的朋友一定要看,这是训练必备的POJ ZOJ题目分类及解题思路
本代码是zoj上AC的1951的代码,把双重循环简化为O(n),不过素数判断的改进还不够
zoj1027解题指南和代码,还不错,是学校培训给的。
浙大ZOJ题目分类,可以让你更方便快速锁定那你想要联系的题目,是自己快速提高·
ZOJ题解集合-截至2835。共1244个文件,C/C++,有重复
zoj 题库 详细解答 解题代码 acm
zoj4041正确题解源代码,以及运行程序
大学ACM竞赛,ZOJ 1733 运用递归(优化)的方法。ac的代码。
zoj 1002 C语言的为什么描述要这么多字啊。。
zoj吐血制作,希望大家喜欢
700道题的源代码啊,管用的.。。。。。。