Nyoj42 一笔画问题 (欧拉道路)
http://acm.nyist.net/JudgeOnline/problem.php?pid=42题目链接
- #include <cstdio>
- #include <cstring>
- #define CLR(arr) memset(arr,0,sizeof(arr))
- #define P 1001
- int G[P],fa[P];
- int find(int x){return x==fa[x]?x:x=find(fa[x]);}
- int main()
- {
- int n,a,b,f,p,q;
- scanf("%d",&n);
- while(n--){
- f=1;
- scanf("%d%d",&p,&q);
- for(int i=1;i<=p;i++)fa[i]=i;
- while(q--){
- scanf("%d%d",&a,&b);
- G[a]++;//读取出入度
- G[b]++;
- fa[a]=find(b);
- }
- fa[a]=find(a);
- for(int i=1;i<=p;i++)if((fa[i]=find(i))!=fa[a]){//判断各点是否在同一集合中
- f=0;
- break;
- }
- int sum=0;
- if(f)//若已判断图为不连通,则不判断出入度
- for(int i=1;i<=p;i++)if(G[i]%2){//判断出入度和是否为奇数
- sum++;
- if(sum>2){//出入度和为奇数,则不可能为欧拉道路
- f=0;
- break;
- }
- }
- puts(f?"Yes\n":"No\n");
- CLR(G);
- }
- return 0;
- }
一笔画,儿时经常玩的游戏,后来才知道,那叫欧拉道路,这题本质就是对欧拉道路的判断,根据已有定理,可形成欧拉道路的图中任意点的出入度和为奇数的个数不可以超过2个,因为有出必有入,这一点很容易编程实现,但上面的定理是基于图连通的情况下,因此我们还需要判断图的连通性,因为不想无脑dfs或bfs,于是上网查找更高效的图连通性判断算法,发现有所谓的传递闭包,想起白书里有,就翻了一天书,发作了两天鼻炎,最后发现这种方法是基于floyd算法实现的,时间复杂度是O(n3),还是不满意,就想用并查集实现,发现果然可行,但用了整整4ms,排行最高的只用了0ms,我想知道用 了什么方法,结果也是利用了并查集,而且方法更聪明(改到极致。。),这里也贴一下。(这算不算侵权。。。),并查集真是我见过最好用的数据结构,简单,代码少,应用性强。
- #include<stdio.h>
- #include<string.h>
- int father[1002];
- int Find(int x)
- {
- if(father[x]==-1) return x;
- return father[x]=Find(father[x]);
- }
- int main()
- {
- int n,m,T,i,in[1002],a,b,sum,f;
- scanf("%d",&T);
- while(T--)
- {
- memset(in,0,sizeof(in));
- memset(father,-1,sizeof(father));
- scanf("%d%d",&n,&m);
- for(i=0,sum=0;i<m;i++)
- {
- scanf("%d%d",&a,&b);
- ++in[a]; ++in[b];
- a=Find(a); b=Find(b);
- if(a!=b) { father[a]=b; sum++; }
- }
- if(sum<n-1) { printf("No\n"); continue; }
- for(i=1,f=0;i<=n;i++)
- if(in[i]%2) { f++; if(f>2) break; }
- if(f==0||f==2) printf("Yes\n");
- else printf("No\n");
- }
- }
Nyoj42 一笔画问题 (欧拉道路)的更多相关文章
- 6-14 Inspector s Dilemma uva12118(欧拉道路)
题意:给出一个国家城市个数n 所需走过道路个数e 每条道路长t 该国家任意两个城市之间都存在唯一道路长t 要求 :找一条最短的路遍历所有所需走过的路 一开始以为是图的匹配 但是好 ...
- UVA 10129 Play on Words(欧拉道路)
题意:给你n个字符串,问你是否可以出现一条链,保证链中每个字符串的第一个元素与上一个字符串的最后一个元素相同,注意可能重复出现同一个字符串 题解:以每一个字符串第一个元素指向最后一个元素形成一个有向图 ...
- Uva 10129 - Play on Words 单词接龙 欧拉道路应用
跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...
- UVa 10129 Play On Words【欧拉道路 并查集 】
题意:给出n个单词,问这n个单词能否首尾接龙,即能否构成欧拉道路 按照紫书上的思路:用并查集来做,取每一个单词的第一个字母,和最后一个字母进行并查集的操作 但这道题目是欧拉道路(下面摘自http:// ...
- POJ 2513 Colored Sticks(欧拉道路+字典树+并查集)
http://poj.org/problem?id=2513 题意: 给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的. 思路: 题目很明 ...
- UVA-10129 Play on Words (判断欧拉道路的存在性)
题目大意:给出一系列单词,当某个单词的首字母和前一个单词的尾字母相同,则这两个单词能链接起来.给出一系列单词,问是否能够连起来. 题目分析:以单词的首尾字母为点,单词为边建立有向图,便是判断图中是否存 ...
- 【UVa】12118 Inspector's Dilemma(欧拉道路)
题目 题目 分析 很巧秒的一道题目,对着绿书瞎yy一会. 联一下必须要走的几条边,然后会形成几个联通分量,统计里面度数为奇数的点,最后再减去2再除以2.这样不断相加的和加上e再乘以t就是答案, ...
- UVA 10441 - Catenyms(欧拉道路)
UVA 10441 - Catenyms 题目链接 题意:给定一些单词,求拼接起来,字典序最小的,注意这里的字典序为一个个单词比过去,并非一个个字母 思路:欧拉回路.利用并查集判联通,然后欧拉道路判定 ...
- UVA10129———欧拉道路
题目 输入n(n≤100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同(例如 acm,malform,mouse).每个单词最多包含1000 ...
随机推荐
- Timer组件
1.常用属性 Interval 用于获取或设置Timer组件Tick事件发生的时间间隔,属性值不能小于1 制作左右飘摇窗体 private void timer1_Tick(object sender ...
- C#微信登录-电脑版扫描二维码登录
像京东,一号店等网站都实现了用微信来登录的功能,就是用手机上的微信扫一扫网站上的二维码,微信上确认后,即可自动用微信的帐号登录网站. 一.创建网站应用 在微信开放平台创建一个网站应用 https:// ...
- python 删除文件和文件夹
1.删除文件 '''删除文件 ''' def DeleteFile(strFileName): fileName = unicode(strFileName, "utf8") if ...
- Automotive Security的一些资料和心得(8):Hardware Security Module (HSM)
1. Introduction - 保护软件的安全性措施,作为值得信赖的安全锚,- 安全地生成,存储和处理安全性关键材料屏蔽任何潜在的恶意软件,?- 通过运用有效的限制硬件篡改攻击的可能性篡改保护措施 ...
- Codeforces Round #360 div2
Problem_A(CodeForces 688A): 题意: 有d天, n个人.如果这n个人同时出现, 那么你就赢不了他们所有的人, 除此之外, 你可以赢他们所有到场的人. 到场人数为0也算赢. 现 ...
- ie6 css sprites重复加载
如果你使用css sprites,那么在ie6下并不能发挥sprites的作用,它还是会每次再重新 加载这个图片,解决方法为为ie6添加下面这条js: <!--[if IE 6]> ...
- BZOJ 3997 [TJOI 2015 组合数学] 解题报告
这个题我脑洞了一个结论: 首先,我们定义满足以下条件的路径为“从右上到左下的路径”: 对于路径上任何不相同的两个点 $(x_1, y_1)$,$(x_2, y_2)$,都有: $x_1\neq x_2 ...
- 升级mac中的系统之后,给PHP安装扩展常出现问题
(1)在装mcrypt插件时报错,提示:mcrypt fatal error: 'php.h' file not found,然后又仔细操作了一次在输完phpize回车时就已经开始出错了,出错信息如下 ...
- sublime text 2 前端编码神器-快捷键与使用技巧介绍
介绍网址:http://www.xuanfengge.com/sublime-text-2-artifact.html
- 李洪强漫谈iOS开发[C语言-024]-表达式与赋值运算符