6-16 单词 uva10129
了解了欧拉回路和欧拉道路的性质 :
欧拉道路 最多只有两个奇点(不可能只有一个奇点) 并且当有两个奇点的时候 一个奇点入比出多一 一个奇点出比入多一
采用并查集查看是否连同 如果连通块大于等于2 显然不成立
然后判断 入数组 和出数组的个数 当处于个数不相同的时候说明有奇点 判断此时一个为入奇点 一个为出奇点!!
十分巧妙
根据查找连通性不同 有两种方式:
并查集
#include<bits/stdc++.h>
using namespace std;
int f[];
int vis[];
int in[];
int out[]; int find1(int x)
{
return f[x]==x?x:f[x]=find1( f[x] );
} void uni(int a,int b)
{
if(find1(a)!=find1(b))
{
f[a]=b;
}
} char m1[][];
char m2[][]; int main()
{ int cas;cin>>cas;
while(cas--)
{
int n;cin>>n;
memset(vis,,sizeof(vis));
memset(in,,sizeof(in));
memset(out,,sizeof(out));
for(int i=;i<;i++) f[i]=i;
string s;getchar();
while(n--)
{
getline(cin,s);
in[s[]-'a' ]++; out[s[s.size()-]-'a' ]++;
vis[ s[]-'a' ]=vis[ s[s.size()-]-'a' ]=; uni( f[s[]-'a'],f[s[s.size()-]-'a' ]);
} int cnt=;
for(int i=;i<;i++)
{
if(vis[i]&&f[i]==i)cnt++;
}
if(cnt>=){printf("The door cannot be opened.\n");continue;} int ru=-,chu=-; int ok=;
for(int i=;i<;i++)
{ if(vis[i]&&in[i]!=out[i])
{
if(in[i]==out[i]+&&ru==-)ru=;
else if(in[i]==out[i]-&&chu==-)chu=;
else ok=;
} } if(ok)printf("Ordering is possible.\n");
else printf("The door cannot be opened.\n"); } return ;
}
DFS
#include<cstring>
#include<iostream>
#include<cstdio>
#include<cmath>
#define MAXN 100
using namespace std;
int vis[MAXN],G[MAXN][MAXN],N, T,f[MAXN],rank[MAXN], in[MAXN],out[MAXN]; void dfs(int u){
vis[u] = true;
for(int i=; i<MAXN; ++i){
if(G[u][i] && !vis[i])
dfs(i);
}
} int main(){ freopen("input.txt","r",stdin);
scanf("%d",&T);
while(T--){
memset(G, , sizeof(G));
memset(in, , sizeof(in));
memset(out, , sizeof(out)); char str[]; scanf("%d",&N); for(int i=; i<N; ++i){
scanf("%s", str);
++G[str[]-'a'][str[strlen(str)-]-'a'];
++out[str[]-'a'];
++in[str[strlen(str)-]-'a'];
} bool flag=true; int num1=, num2=;
for(int i=; i<MAXN; ++i){
if(!flag) break;
if(in[i]!=out[i]){
if(in[i]==out[i]+) { ++num1; }
else if(out[i]==in[i]+) { ++num2; }
else {flag=false; break; }
}
} if(num1 && num2 && num1+num2>) flag=false; if(flag){
memset(vis, , sizeof(vis));
for(int i=; i<MAXN; ++i)
if(out[i]) { dfs(i); break; } bool flag2=true;
for(int i=; i<MAXN; ++i){
if(in[i] && !vis[i]) { flag2=false; break; }
if(out[i] && !vis[i]) { flag2=false; break; }
}
if(flag2) printf("Ordering is possible.\n");
else printf("The door cannot be opened.\n");
}
else{
printf("The door cannot be opened.\n");
}
}
return ;
}
6-16 单词 uva10129的更多相关文章
- 例题6-16 单词 UVa10129
1.题目描写叙述:点击打开链接 2.解题思路:本题利用欧拉回路存在条件解决. 能够将全部的单词看做边,26个字母看做端点,那么本题事实上就是问是否存在一条路径,能够到达全部出现过的字符端点. 因为本题 ...
- C# 正则表达式
引用自:http://www.cnblogs.com/stg609/archive/2009/06/03/1492709.html 摘要:正则表达式(Regular Expressions),相信做软 ...
- C#基础回顾:正则表达式
C#基础回顾:正则表达式 写在前面:本文根据笔者的学习体会结合相关书籍资料对正则表达式的语法和使用(C#)进行基本的介绍.适用于初学者. 摘要:正则表达式(Regular Expressions),相 ...
- C#基础回顾:正则表达式-转
写在前面:本文根据笔者的学习体会结合相关书籍资料对正则表达式的语法和使用(C#)进行基本的介绍.适用于初学者. 摘要:正则表达式(Regular Expressions),相信做软件开发的朋友或多或少 ...
- 6_16 单词(UVa10129)<欧拉回路>
考古学家有时候遇到一些神秘的门,这些门需要解开特定的谜题才能打开.因为没有其他方法可以打开门,这谜题对我们来说非常重要.在门上有许多磁盘,每个盘子上有一个英文单字在上面.这些盘子必须被安排,使得盘子上 ...
- [LeetCode] Maximum Product of Word Lengths 单词长度的最大积
Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...
- [LeetCode] Substring with Concatenation of All Words 串联所有单词的子串
You are given a string, s, and a list of words, words, that are all of the same length. Find all sta ...
- 做中学(Learning by Doing)之背单词-扇贝网推荐
做中学(Learning by Doing)之背单词-扇贝网推荐 看完杨贵福老师(博客,知乎专栏,豆瓣)的「继续背单词,8个月过去了」,我就有写这篇文章的冲动了,杨老师说: 有时候我会感觉非常后悔,如 ...
- 单词words
论一类脑筋急转弯题和奇技淫巧题的解题技巧 [题意] 给定n个长为m且只包含xyz的字符串,定义两个字符串的相似程度为它们对应位置相同字符个数(比如xyz和yyz的相似程度为2,后两位相同),分别求出相 ...
随机推荐
- Oracle——存储过程的使用
为什么使用存储过程? 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 存储过程的定义: 存储过程(Sto ...
- caffe 中 python 数据层
caffe中大多数层用C++写成. 但是对于自己数据的输入要写对应的输入层,比如你要去图像中的一部分,不能用LMDB,或者你的label 需要特殊的标记. 这时候就需要用python 写一个输入层. ...
- Linux之Ubuntu安装搜狗输入法
1.下载搜狗输入法安装包 搜狗官网:https://pinyin.sogou.com/linux/ 2.更新ubuntu内置的包管理器apt-get的软件源[如果中途安装失败,经常是此原因造成的] s ...
- 关于apache 开启 ssl https 支持 TLS1.2 的些事
项目背景 需要搭建一个小程序的服务器,当然要使用https协议服务器windows service 2012 r2,后台语言是php,服务集成环境装的是appserv2.5 ,apache2.2证书申 ...
- java程序运存扩容
线上程序随着业务增多,运行的越来越慢,初步判定是因为内存分配的太小导致频繁的进行GC和OOM,于是着手增加内存上限. 增加内存上限都知道是修改java启动的opt,因为服务容器是tomcat 首先是在 ...
- Biorhythms HDU - 1370 (中国剩余定理)
孙子定理: 当前存在三个式子,t%3=2,t%5=3,t%7=2.然后让你求出t的值的一个通解. 具体过程:选取3和5的一个公倍数t1能够使得这个公倍数t1%7==1,然后选取3和7的一个公倍数t2使 ...
- spring整合ehcache2.5.2缓存异常-- net.sf.ehcache.CacheException
报错如下: The source of the existing CacheManager is: DefaultConfigurationSource [ ehcache.xml or ehcach ...
- Dom4j向XML中增加节点与属性——(四)
先获取到节点,然后在节点山添加Element 添加节点 添加属性 设置开始标签与结束标签的值book.addElement("描述").addAttribute("nam ...
- cmake介绍
1. cmake介绍 1.1 cmake用途 CMake的用途是能通过一系列的源码和相关的配置来生成需要的编译器平台上的项目文件.譬如,如果一个项目需要在Windows上用VS编译,在Linux上用m ...
- 查看Windows版本号
1.Win+R,在运行中输入:msinfo32 2.在cmd中输入:ver 3.注册表(regedit)中:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows ...