首先想到的是并查集,然后WA。。。原因在这,我第一次敲的是Find(1) == Find(12)来作为可以成功的条件,实际上这样是不行的,比方说 bell 和 mail实际上是不满足条件的,可以理解为有向边,合并的时候要注意是首尾相接,可以改为Find(1) == 12 或者 Find(12) == 1,具体取决于并查集父子节点的合并关系,其次可以使用弗洛伊德算法或者DFS都可以。

并查集:

#include<iostream>
#include<cstring>
#include<cstdio> using namespace std;
const int N = + ;
int pre[N]; int Find(int x){
return pre[x] == x? x : (pre[x] = Find(pre[x]));
} void Merge(int x, int y){
x = Find(x), y = Find(y);
if(x != y) pre[x] = y; //这里要注意, 如果是pre[y] = x, 则要Find(12) == 1
}
char ch[N*];
int main(){
while(scanf("%s", ch) == ){
for(int i = ; i < ; i++) pre[i] = i;
while(ch[] != ''){
int x = ch[] - 'a';
int y = ch[strlen(ch) - ] - 'a';
Merge(x, y);
scanf("%s", ch);
}
printf("%s\n",Find() == ?"Yes.":"No.");
}
return ;
}
弗洛伊德:
#include<iostream>
#include<cstring>
#include<cstdio> using namespace std;
const int N = + ;
const int INF = 0x3f3f3f3f;
int mat[N][N]; void Flory(){
for(int k = ; k < ; k++)
for(int i = ; i < ; i++)
for(int j = ; j < ; j++) mat[i][j] = min(mat[i][j], mat[i][k] + mat[k][j]);
} void Init(){
for(int i = ; i < ; i++)
for(int j = ; j < ; j++) mat[i][j] = (i!=j)?INF:;
} char ch[];
int main(){
while(scanf("%s", ch) == ){
Init();
while(ch[] != ''){
int x = ch[] - 'a';
int y = ch[strlen(ch)-] - 'a';
mat[x][y] = ; //有向边
scanf("%s", ch);
}
Flory();
printf("%s.\n",mat[][] < INF?"Yes":"No");
}
return ;
}

DFS:

#include<iostream>
#include<cstring>
#include<cstdio> using namespace std;
const int N = + ;
bool dp[N][N],can; void DFS(int x){
if(can) return ;
if(can = (x == )) return ;
for(int i=; i < ; i++)
if(dp[x][i]){
dp[x][i] = false;
DFS(i);
dp[x][i] = true;
}
}
void Init(){
for(int i = ; i < ; i++)
for(int j = ; j < ; j++) dp[i][j] = false;
can = false;
}
char ch[];
int main(){
while(scanf("%s", ch) == ){
Init();
while(ch[] != ''){
int x = ch[] - 'a';
int y = ch[strlen(ch)-] - 'a';
dp[x][y] = true;
scanf("%s", ch);
}
DFS( );
printf("%s.\n", can?"Yes":"No");
}
}


HDU-1181 变形课(多种方式,好题)的更多相关文章

  1. hdu 1181:变形课(搜索水题)

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submis ...

  2. hdu 1181 变形课

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submis ...

  3. [ACM] hdu 1181 变形课

    变形课 Problem Description 呃......变形课上Harry碰到了一点小麻烦,由于他并不像Hermione那样可以记住全部的咒语而任意的将一个棒球变成刺猬什么的,可是他发现了变形咒 ...

  4. hdu 1181 变形课(dfs)

    Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...

  5. HDU 1181 变形课 (深搜)

    题目连接 Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形 ...

  6. HDU 1181.变形课-并查集

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submis ...

  7. 杭电(hdu)1181 变形课

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submi ...

  8. hdoj - 1181 变形课

    Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...

  9. 变形课 HDU - 1181 【floyd传递闭包水题】

    呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个 ...

随机推荐

  1. 【leetcode】1129. Shortest Path with Alternating Colors

    题目如下: Consider a directed graph, with nodes labelled 0, 1, ..., n-1.  In this graph, each edge is ei ...

  2. codeforces 819B - Mister B and PR Shifts(思维)

    原题链接:http://codeforces.com/problemset/problem/819/B 题意:把一个数列整体往右移k位(大于n位置的数移动到数列前端,循环滚动),定义该数列的“偏差值” ...

  3. 【bzoj2073】【[POI2004]PRZ】位运算枚举子集的特技

    (上不了p站我要死了) Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上的人都不能超过一 ...

  4. [ZJU 1003] Crashing Balloon

    ZOJ Problem Set - 1003 Crashing Balloon Time Limit: 2 Seconds      Memory Limit: 65536 KB On every J ...

  5. 【bzoj1324】Exca王者之剑(8-9 方格取数问题)

    *题目描述: 在一个有m*n (m,n<=100)个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法, ...

  6. 双系统使用Linux引导

    今天在装linux的window双系统时,出现在无法使用linux引导的问题,开机总是自动进windows,照理来说我先装的window,后装的linux,应该是开机进grub引导才对.在主板的boo ...

  7. 【JOI2017春季合宿】Port Facility

    http://uoj.ac/problem/356 题解 思路和\(NOIP\)双栈排序差不多. 对于两个元素,若\(l_1<l_2<r_1<r_2\)那么它们不能在一个栈里,我们连 ...

  8. Java 静态初始化块等的执行顺序

    实例代码 package text; class Root { static{ System.out.println("Root的静态初始化块"); } { System.out. ...

  9. Solr Windows环境安装配置

    在本章中,我们将讨论如何在Windows环境中设置Solr.要在Windows系统上安装Solr,需要按照以下步骤 - 访问Apache Solr的主页,然后点击下载按钮或直接访问:http://lu ...

  10. 解决:使用ajax验证登录信息返回前端页面时,当前整个页面刷新。

    源代码如下: function loginform(){ $.ajax({ url:"loginValidate.do", type:'post', data:{"nam ...