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

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

采用并查集查看是否连同   如果连通块大于等于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. dp题

    1.luogu 1484种树 50分思路:dp,但是数据规模过大没法dp选择奇怪贪心 dp方程 到i坑种j树 dp[i][j]=max(dp[i-1][j],dp[i-2][j-1]) 100分思路: ...

  2. 在浏览器中使用Javascript

    在浏览器中点击鼠标右键——检查,选择console,可以在里面写Javascript代码,并可以在页面实时看到结果: 关于JavaScript的几个注意事项: JavaScript 语句和 JavaS ...

  3. JavaScript学习 - 基础(八) - DOM 节点 添加/删除/修改/属性值操作

    html代码: <!--添加/删除/修改 --> <div id="a1"> <button id="a2" onclick=&q ...

  4. 深入解析Java AtomicInteger 原子类型

    深入解析Java AtomicInteger原子类型 在进行并发编程的时候我们需要确保程序在被多个线程并发访问时可以得到正确的结果,也就是实现线程安全.线程安全的定义如下: 当多个线程访问某个类时,不 ...

  5. JavaScript内置对象——Math对象

    这几天在刷leetcode的时候用到了一些Math对象的知识,故作一下总结~ JavaScript中的Math对象也是一个常见的内置对象,然而与String等其它常见对象不同,Math对象没有构造函数 ...

  6. 六、regularized logisitic regssion练习(转载)

    转载链接:http://www.cnblogs.com/tornadomeet/archive/2013/03/17/2964858.html 在上一讲Deep learning:五(regulari ...

  7. Windows Server2008各版本区别

    Windows Server 2008 是专为强化下一代网络.应用程序和 Web 服务的功能而设计,是有史以来最先进的 Windows Server 操作系统.拥有 Windows Server 20 ...

  8. How to Repair GRUB2 When Ubuntu Won’t Boot

    Ubuntu and many other Linux distributions use the GRUB2 boot loader. If GRUB2 breaks—for example, if ...

  9. XAF 与 CIIP

    XAF 与 CIIP:网站:http://www.uims.top, XAF技术博客:http://www.cnblogs.com/foreachlife/ tylike 升级到  DevExpres ...

  10. 一台电脑,两个及多个git账号配置

    1. 生成两[三]个ssh公钥私钥 方法参照:http://www.cnblogs.com/fanbi/p/7772812.html第三步骤 假定其中一个是id_rsa, 另一个时id_rsa_two ...