了解了欧拉回路和欧拉道路的性质 :

欧拉道路  最多只有两个奇点(不可能只有一个奇点)     并且当有两个奇点的时候  一个奇点入比出多一   一个奇点出比入多一

采用并查集查看是否连同   如果连通块大于等于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的更多相关文章

  1. 例题6-16 单词 UVa10129

    1.题目描写叙述:点击打开链接 2.解题思路:本题利用欧拉回路存在条件解决. 能够将全部的单词看做边,26个字母看做端点,那么本题事实上就是问是否存在一条路径,能够到达全部出现过的字符端点. 因为本题 ...

  2. C# 正则表达式

    引用自:http://www.cnblogs.com/stg609/archive/2009/06/03/1492709.html 摘要:正则表达式(Regular Expressions),相信做软 ...

  3. C#基础回顾:正则表达式

    C#基础回顾:正则表达式 写在前面:本文根据笔者的学习体会结合相关书籍资料对正则表达式的语法和使用(C#)进行基本的介绍.适用于初学者. 摘要:正则表达式(Regular Expressions),相 ...

  4. C#基础回顾:正则表达式-转

    写在前面:本文根据笔者的学习体会结合相关书籍资料对正则表达式的语法和使用(C#)进行基本的介绍.适用于初学者. 摘要:正则表达式(Regular Expressions),相信做软件开发的朋友或多或少 ...

  5. 6_16 单词(UVa10129)<欧拉回路>

    考古学家有时候遇到一些神秘的门,这些门需要解开特定的谜题才能打开.因为没有其他方法可以打开门,这谜题对我们来说非常重要.在门上有许多磁盘,每个盘子上有一个英文单字在上面.这些盘子必须被安排,使得盘子上 ...

  6. [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 ...

  7. [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 ...

  8. 做中学(Learning by Doing)之背单词-扇贝网推荐

    做中学(Learning by Doing)之背单词-扇贝网推荐 看完杨贵福老师(博客,知乎专栏,豆瓣)的「继续背单词,8个月过去了」,我就有写这篇文章的冲动了,杨老师说: 有时候我会感觉非常后悔,如 ...

  9. 单词words

    论一类脑筋急转弯题和奇技淫巧题的解题技巧 [题意] 给定n个长为m且只包含xyz的字符串,定义两个字符串的相似程度为它们对应位置相同字符个数(比如xyz和yyz的相似程度为2,后两位相同),分别求出相 ...

随机推荐

  1. JavaScript之Dom操作【删除当前节点】

    //最新更新:2017-11-25 //现在可以通过更强大而快捷的方式为所有的HTMLElement元素的Dom操作扩展新的方法[注意事项:处理HTMLElemnt元素时,此法对IE-8无效] //原 ...

  2. luogu P1053 篝火晚会

    传送门 首先如果题目的目标状态不是一个环就不合法 然后先把这个环搞出来,然后每个位置上的数对这个数对应的位置连边,可以发现有若干个环,而只要对这些环执行操作就好了,答案上界显然是\(n\).然后,如果 ...

  3. pt-table-checksum检测不出主从差异处理

    几个月前写过pt-table-checksum 3.0.4检测不出主从差异数据,当时的解决方案是使用旧版本,另一个挫方法是自行设置binlog_format='STATEMENT'.现在已经发布到3. ...

  4. Git操作学习笔记

    根据廖雪峰老师git教程学习整理 这里需要辨析一下概念.Github是代码托管平台,是协作的工具;而Git是版本控制工具.Git不需要联网,在本机就可以使用 集中式版本控制系统与分布式版本控制系统 S ...

  5. mysql 案例~ mysql故障恢复

    一 :遇到一个朋友的案例 分享下处理流程 二 : 现象 1 mysql无法启动,观察日志发现 InnoDB: Failing assertion: !m_fatal InnoDB: We intent ...

  6. mysql 案例 ~ 分析执行完的大事务

    一 简介:今天咱们来聊聊如何定位以及执行完的大事务 二 目的:通过分析binlog脚本来定位执行的大事务 三 分析脚本 mysqlbinlog --base64-output=decode-rows ...

  7. WebRTC架构和协议栈-zz

    为了便于理解,我们来看一个最基本的三角形WebRTC架构(图4).在这个架构中,移动电话用“浏览器M”表示,笔记本电脑用“浏览器L”表示,通过Web服务器将它们连接起来.要建立一个实时媒体通讯,两台设 ...

  8. atof()函数 atol()

    atof()函数 atof():double atof(const char *str ); 功 能: 把字符串转换成浮点数 str:要转换的字符串. 返回值:每个函数返回 double 值,此值由将 ...

  9. nRFgo Studio 和 Nrfjprog 无法找到JLinkARM.dll的解决方法

    Segger在第一次安装的时候,会在注册表中添加安装路径的字段,nRF的两个软件就根据这两个注册表字段来寻找JLinkARM.dll.而当你卸载/更新Segger的时候,注册表的相关的字段是不会被修改 ...

  10. vim学习、各类插件配置与安装【转】

    转自:https://www.cnblogs.com/forest-wow/p/6916531.html 1. vim学习 vim基础学习:根据网上流行基础文章<简明Vim练级攻略>,进阶 ...