C/C++数据结构——虚虚实实(并查集欧拉路)
题目描述
震为雷,临危不乱,亨通畅达;巽为风,柔顺伸展,厚载万物。
震卦:洊雷,震,君子以恐惧修省。一口金钟在淤泥,人人拿着当玩石,忽然一日钟悬起,响亮一声天下知。
巽卦:随风,巽,君子以申命行事。一叶孤舟落沙滩,有篙无水进退难,时逢大雨江湖溢,不用费力任往返。
算卦先生来问你,对于每个他给出的无向图,是否存在一条路径能够经过所有边恰好一次,并且经过所有点?不需要满足最后回到起点。
输入描述:
第一行一个数 TT ,表示有 TT 组数据。对与每组数据,第一行有两个数 n,mn,m,接下去 mm 行每行两个数 u,vu,v 描述一条无向边 (u,v)(u,v)。图不保证联通。
输出描述:
对于每组数据,如果存在,输出 \texttt{“Zhen”}“Zhen” ,否则输出 \texttt{“Xun”}“Xun” 。
示例1
输入
2
2 2
1 1
2 1
4 6
1 3
1 4
1 2
3 2
4 2
4 3
输出
Zhen
Xun
备注:
链接:https://ac.nowcoder.com/acm/problem/15518
来源:牛客网
解题代码
#include<stdio.h>
int point[55];
int dv[55];
void init()
{for(int i=1;i<=50;i++){point[i]=i;dv[i]=0;}
}
int find(int x)
{return point[x]==x?point[x]:(point[x]=find(point[x]));
}void merge(int x,int y)
{x=find(x);y=find(y);if(x!=y)point[y]=x;
}
int judge(int n){int k=0;for(int i=1;i<=n;i++){if(dv[i]%2==1){k++;}}if(k==2||k==0) return 1;else return 0;}
int main()
{int T;scanf("%d",&T);int n,m,u,v;while(T--){scanf("%d%d",&n,&m);init();for(int i=1;i<=m;i++){scanf("%d%d",&u,&v);if(u!=v){dv[u]++;dv[v]++;}merge(u,v);}int sum=0;for(int i=1;i<=n;i++){if(point[i]==i)sum++;}if(sum==1&&judge(n)){printf("Zhen\n");}else{printf("Xun\n");}}
}
解题思路
这道题是很明显的并查集问题,然后还涉及到了欧拉路的问题。
解释一下欧拉路和欧拉回路
欧拉回路和欧拉路的区别
- 通过图中所有边恰好一次且行遍所有顶点的通路称为欧拉通路。
- 通过图中所有边恰好一次且行遍所有顶点的回路称为欧拉回路。
- 具有欧拉回路的无向图或有向图称为欧拉图。
- 具有欧拉通路但不具有欧拉回路的无向图或有向图称为半欧拉图。
- 非形式化地讲,欧拉图就是从任意一个点开始都可以一笔画完整个图,半欧拉图必须从某个点开始才能一笔画完整个图。
以上摘抄自他人博客,https://blog.csdn.net/qq_42852687/article/details/120419002
题目要求一次性走完所有的路径和点,且图是无向的,就要求构成一个无向图的欧拉路,那么度数为奇数的点只有 0或者2个,其余的点度数为偶数,也就是起点和终点,满足这个条件就能判断是Zhen还是Xun,但是题目里会给出两个u和v相等的情况,比如用例1输入了1和1,这里要特别判断一下。
最后的时候判断一下是否只有一个根节点并且是否满足欧拉路就可以了。
C/C++数据结构——虚虚实实(并查集欧拉路)相关推荐
- 10129 Play on Words-----并查集+欧拉路!!!
题意:判断所有字符串是不是可以连在一起,实际上就是判断所构造的有向图是否存在欧拉回路或者欧拉图: #include<iostream> #include<cstdio> #in ...
- 数据结构-PHP 并查集(Union Find)
文章目录 数据结构-PHP 并查集(Union Find) 1.并查集示意图 2.并查集合并 3.并查集简单的代码示例 3.1 PHP代码定义 3.2 输出演示 数据结构-PHP 并查集(Union ...
- 数据结构 之 并查集
并查集是一种树型的数据结构,其保持着用于处理一些不相交集合(Disjoint Sets)的合并及查询问题. 有一个联合-查找算法(union-find algorithm)定义了两个操作用于此数据结构 ...
- 数据结构之并查集Union-Find Sets
1. 概述 并查集(Disjoint set或者Union-find set)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题. 2. 基本操作 并查集 ...
- 数据结构之并查集:并查集的介绍与Python代码实现——18
并查集的介绍 并查集(Union-find)数据结构也称作合并查找集(Merge-find set)或者不相交集数据结构(disjoint-set data structure),它是一种记录了由一个 ...
- 数据结构 之 并查集(Disjoint Set)
一.并查集的概念: 首先,为了引出并查集,先介绍几个概念: 1.等价关系(Equivalent Relation) 自反性.对称性.传递性. 假设a和b存在等价关系.记 ...
- 数据结构 7并查集(DISJOINT SET)
并查集(The disjoint set ADT) 等价关系 Relation R:若对于每一对元素(a,b),a,b∈S,aRb或者为true或者为false,则称集合S上定义关系R.如果aRb为t ...
- [重修数据结构0x03]并查集、堆、优先队列(2021.8.11)
前言 在做遍历的题目的时候,发现掌握一些特殊的数据结构和技巧有时对解决题目有着决定性的作用,不可不学.因此特地拿出来两天学习一下并查集.堆.优先队列.以后有更多思考和感悟再加补充吧.内容来自算法笔记, ...
- 高阶数据结构(1):并查集 与 图
"Head in the clouds" 一.并查集 (1)认识并查集? 在一些问题中需要将n个不同的元素划分成 一些不想交的集合. 开始时,每个元素自成一个单元素集合,然后按一定 ...
最新文章
- Docker 私有仓库最简便的搭建方法
- 百度地图软件测试,使用 app-inspector 解析 i 调用百度地图定位的页面时 (iOS),会导致测试 app 崩溃...
- mongodb 的使用场景和不适合使用的场景
- java ee 中文乱码的问题
- 【今日CS 视觉论文速览】19 Dec 2018
- 小狼程序员:工作遐想
- graphics | 基础绘图系统的拼图方法之三:使用mfrow、mfcol参数和layout函数
- 《剑指 Offer I》刷题笔记 20 ~ 30 题
- 企业级备份方案系列PART3:SCDPM 2012备份/恢复Exchange2010
- 高阶函数-参数与返回值
- 第三季-第26课-网络并发服务器设计
- 栈溢出(Stack Overflow)
- android系统结构与应用编程 实验报告_学习编程或编码的最佳Android应用程序
- 网络互联课程设计(校园网和企业网)
- 常用编码说明-GB2312
- G31主板支持1440*900分辨率
- 基于asp.net714零食销售海米跨境电子商务商城
- Altium Designer 19 错误警告 Design contains shelved or modified (but not repoured) polygons
- 多多小程序(doodoo)发布1.0,基于node,vue开发的微信小程序系统
- IDEA 开发工具安装教程及破解步骤(激活至2099年)