Play on Words(欧拉路)
http://poj.org/problem?id=1386
题意:给定若干个单词,若前一个的尾字母和后一个单词的首字母相同,则这两个单词可以连接,问是否所有的单词都能连接起来。
思路:欧拉路的判断,且为有向图,将每个单词的首尾字母看做节点,中间字母看做边,建图。
(1)用并查集判断图是否连通。
(2)判断奇数节点的个数为0或2个,其余节点均入度=出度。
#include <stdio.h>
#include <string.h>
const int N=;
const int M=;
int in[M];
int out[M];
int f[M],vis[M];
void init()
{
for (int i = ; i < M; i ++)
{
in[i] = ;
out[i] = ;
f[i] = i;
vis[i] = ;
}
}
int find(int x)
{
if (x!=f[x])
f[x] = find(f[x]);
return f[x];
}
void merge(int x,int y)
{
f[find(x)] = find(y);
}
int main()
{
int n,m;
scanf("%d",&n);
while(n--)
{
char str[N];
int v,u,len;
scanf("%d",&m);
init();
for (int i = ; i <= m; i ++)
{
scanf("%s",str);
len = strlen(str);
u = str[]-'a';
v = str[len-]-'a';
vis[u] = ;
vis[v] = ;
in[v]++;
out[u]++;
merge(u,v);
}
int flag = ;
int cnt1 = ,cnt2 = ;
int father = find(v);
for (int i = ; i < M; i ++)//判断图是否连通
{
if (vis[i]&&find(i)!=father)
{
printf("The door cannot be opened.\n");
flag = ;
break;
}
}
if(flag)//判断度数
{
for (int i = ; i < M; i ++)
{
if(vis[i]&&in[i]-out[i]==)
cnt1++;//入度比出度大一的节点的个数
else if (vis[i]&&out[i]-in[i]==)
cnt2++;//出度比入度大一的节点的个数
else if (vis[i]&&in[i]!=out[i])
{
flag = ;
break;
}
}
if ((cnt1==&&cnt2==||cnt1+cnt2==)&&flag)
printf("Ordering is possible.\n");
else
printf("The door cannot be opened.\n");
} }
return ; }
Play on Words(欧拉路)的更多相关文章
- 洛谷P1341 无序字母对[无向图欧拉路]
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- POJ1386Play on Words[有向图欧拉路]
Play on Words Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11846 Accepted: 4050 De ...
- hdu1161 欧拉路
欧拉路径是指能从一个点出发能够“一笔画”完整张图的路径:(每条边只经过一次而不是点) 在无向图中:如果每个点的度都为偶数 那么这个图是欧拉回路:如果最多有2个奇数点,那么出发点和到达点必定为该2点,那 ...
- 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) 思路: ...
随机推荐
- Redis 之hash集合结构及命令详解
1.hset key field value 作用: 把key中 filed域的值设为value 注:如果没有field域,直接添加,如果有,则覆盖原field域的值 2.hmset key fi ...
- Cesium学习笔记(四)Camera
http://blog.csdn.net/HobHunter/article/details/74909641 Cesium 相机控制场景中的视野.操作相机的方法有很多,如旋转,缩放,平移和飞到目的地 ...
- shell使用eval进行赋值bc计算,bad substitution
开始我认为是这样的: [root@jiangyi02.sqa.zmf /home/ahao.mah/ALIOS_TEST] #cat bbb.sh #!/bin/sh eval $1_new=123 ...
- php第十七节课
分页查询 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- 爬虫文件存储-3:Redis
前提条件: 安装并运行redis服务端程序,安装RedisPy库 说明:Redis 是 StrictRedis 的子类,它的主要功能是用于向后兼容旧版本库里的几个方法,官方推荐使用 StrictRed ...
- 腾讯云,搭建LNMP环境
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构. Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统.代表版本有:debian.centos ...
- Html学习总结(2)——Html页面head标签元素的意义和应用场景
相信在html5之前,很少人会关注html页面上head里标签元素的定义和应用场景,可能记得住的只有"title"."keyword"和"descri ...
- CodeForcesGym 100735D Triangle Formation
Triangle Formation Time Limit: Unknown ms Memory Limit: 65536KB This problem will be judged on CodeF ...
- 08springMVC拦截器
u 概述 u 拦截器接口 u 拦截器适配器 u 运行流程图 u 拦截器HelloWorld u 常见应用之性能监控 1 概述 1.1 简介 Spring Web M ...
- 刷新PHP缓冲区
为你的站点加速_php技巧 在当前 PHP 版本的默认配置下,“输出缓冲(Output Buffering)”是被打开的.旧版本则不是这样,在旧版本的 PHP 中,字符串在每次被输出的时候(通过 ec ...