hdu1161 欧拉路
欧拉路径是指能从一个点出发能够“一笔画”完整张图的路径;(每条边只经过一次而不是点)
在无向图中:如果每个点的度都为偶数 那么这个图是欧拉回路;如果最多有2个奇数点,那么出发点和到达点必定为
该2点,那么这个路径就为欧拉路;(前提都是该图连通)
在有向图中:如果每个店的出度和入度都相同,那么为欧拉回路;如果最多只能有2个点的出度不等于入度,并且其中
一个点的 入度=出度+1,另一点的 入度+1=出度,那么为欧拉路;(前提图连通)
//因为字符从第一个到最后一个,所以用有向图
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
char ch[];
int map[][],n,m,pa[];
int r[],c[],vis[];
stack<int>s;
void inint()
{
int i;
for(i=;i<=;i++)
{
pa[i]=i;
}
}
int find(int x)
{
if(x!=pa[x])
pa[x]=find(pa[x]);
return pa[x];
}
int main()
{
int i,j;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&m);
memset(vis,,sizeof(vis));
inint();
memset(r,,sizeof(r));
memset(c,,sizeof(c));
memset(map,,sizeof(map));
for(i=;i<m;i++)
{
scanf("%s",&ch);
int l=strlen(ch);
map[ch[]-'a'+][ch[l-]-'a'+]=;
r[ch[]-'a'+]++;c[ch[l-]-'a'+]++;
int x,y;
x=find(ch[]-'a'+);
y=find(ch[l-]-'a'+);
vis[ch[]-'a'+]=;
vis[ch[l-]-'a'+]=;
if(x!=y)
pa[x]=y;
}
int sum=;
for(i=;i<=;i++)
{
if(pa[i]==i&&vis[i])
{
sum++;
}
if(sum>)
break;
}
if(sum>) //未连通
{
printf("The door cannot be opened.\n");
continue;
}
sum=;
for(i=;i<=;i++)
{
if(vis[i]&&(c[i]!=r[i]))//寻找出度入度不相同的点
{
sum++;
s.push(i);
}
}
if(sum>)//多余2个
printf("The door cannot be opened.\n");
else if(sum==)//出度入度全相同
printf("Ordering is possible.\n");
else if(sum==)
{
int x1,x2;
x1=s.top();
s.pop();
x2=s.top();
s.pop();
if((c[x1]+==r[x1])&&(c[x2]==r[x2]+)||(c[x2]+==r[x2])&&(c[x1]==r[x1]+))//判断是否条件成立
{
printf("Ordering is possible.\n");
}
else printf("The door cannot be opened.\n");
}
else
printf("Ordering is possible.\n");
}
}
hdu1161 欧拉路的更多相关文章
- 洛谷P1341 无序字母对[无向图欧拉路]
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- POJ1386Play on Words[有向图欧拉路]
Play on Words Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11846 Accepted: 4050 De ...
- UVA10054The Necklace (打印欧拉路)
题目链接 题意:一种由彩色珠子组成的项链.每个珠子的两半由不同的颜色组成.相邻的两个珠子在接触的地方颜色相同.现在有一些零碎的珠子,需要确定他们是否可以复原成完整的项链 分析:之前也没往欧拉路上面想, ...
- 洛谷 P1341 无序字母对 Label:欧拉路 一笔画
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- POJ 1637 Sightseeing tour (混合图欧拉路判定)
Sightseeing tour Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6986 Accepted: 2901 ...
- hihocoder 1181 欧拉路.二
传送门:欧拉路·二 #1181 : 欧拉路·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回中小Hi和小Ho控制着主角收集了分散在各个木桥上的道具,这些道具其 ...
- hiho48 : 欧拉路·一
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最后的宝藏.现在他们控制的 ...
- hdu5883 The Best Path(欧拉路)
题目链接:hdu5883 The Best Path 比赛第一遍做的时候没有考虑回路要枚举起点的情况导致WA了一发orz 节点 i 的贡献为((du[i] / 2) % 2)* a[i] 欧拉回路的起 ...
- hihoCoder #1182 欧拉路·三 (变形)
题意: 写出一个环,环上有2^n个格子,每个格子中的数字是0或1,相连着的n个格子可以组成一个数的二进制,要求给出这2^n个数字的序列,使得组成的2^n个数字全是不同的.(即从0到2^n-1) 思路: ...
随机推荐
- u3d_Shader_effects笔记2 自定义surfaceDiffuseLight
1.前面的心情 今晚7点半睡着后,9点半左右被吵醒.醒来后非常失落,感觉人生到底在追求什么,我又在追求什么.昨晚梦到妈妈了.最近不时会想到爷爷的去世.人世的险恶,良心的缺失.不过一切总要向前看,至少我 ...
- tiny6410在I2c用户态中的程序设计eeprom
在读写的过程中,发现写数据成功但是读取数据却失败,猜测是因为iic的读写操作过快,故在写操作后给一定的延迟,进而读写成功. 代码如下: #include <stdio.h>#include ...
- MVC 数据验证[转]
前一篇说了MVC数据验证的例子,这次来详细说说各种各样的验证注解. 一.基础特性 一.Required 必填选项,当提交的表单缺少该值就引发验证错误. 二.StringLength 指定允许的长度 指 ...
- sql语句常用说明与解析
from: http://www.cnblogs.com/rainman/archive/2013/05/01/3053703.html#m3
- 使用javascript实现的雪花飞舞的效果
原作者是在body中不停的插入多个小div雪花来向下慢慢飘,一直飘到body的底部后,将雪花移除,于是,将原来的代码稍加修改,让他只是从屏幕的顶部飘落到屏幕底部(不是body的底部)后,就将雪花移除, ...
- https网站跳转到http网站时,referrer获取不到的问题
工作中,有一个活动列表页A,要链接到具体的活动详情页B,A页面放在https网站上,B页面放在http网站上,从https跳转到http网站时,为了用户隐私安全信息,浏览器默认不传送referrer ...
- 轉發XML
Delphi 中的 XMLDocument 类详解(3) - 读取 xml 文件 先虚拟一个测试文件: test.xml; 放在 c:\temp\ 下备用. <?xml version=&quo ...
- FFT的物理意义
来源:学步园 FFT(Fast Fourier Transform,快速傅立叶变换)是离散傅立叶变换的快速算法,也是我们在数字信号处理技术中经常会提到的一个概念.在大学的理工科课程中,在完成高等数学的 ...
- Kafka及 .NET Core 客户端
消息队列 Kafka 的基本知识及 .NET Core 客户端 消息队列 Kafka 的基本知识及 .NET Core 客户端 前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka ...
- 毫米转换为PX
公式:毫米数/25.4*你的电脑的DPI,win7 DPI 100%缩放为96,125%为120,150%为144,200%为192 象素数 / DPI = 英寸数 英寸数 * 25.4 = 毫米数