首先想到的是并查集,然后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. SpringBoot实体类对象和json格式的转化

    1.引入maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson ...

  2. delphi 10.3.1 android沉浸式透明状态栏

    从10.2升级上来, 之前的沉浸状态栏在android手机上不透明了, 添加二个发布文件,remote path分别设为 res\values-v21和 res\values-v19 style.xm ...

  3. 51nod1730 涂边

    题目描述 题解 八级sb题 显然可以想到状压 枚举当前的宽度\(I\),设\(f[s]\)表示在当前的宽度下选的竖边的状态为s 再设\(g[s1][s2]\)表示状态s1转移到s2的方案数,枚举中间横 ...

  4. Java——JDK1.5新增强的for循环

    <1>JDK1.5新增的for循环对于遍历array或collection非常便利. <2>缺陷:        数组:不能方便地访问下标值.        集合:与使用Int ...

  5. 靠!老师居然叫我们去写博弈论!!!结果写了一个晚上的博弈论,简直要死QAQ。。。发发博客休息一下。。。TAT。。。

    萌萌的糖果博弈 题目描述: 用糖果来引诱小朋友学习是最常用的手法,绵羊爸爸就是用糖果来引诱萌萌学习博弈的.他把糖果分成了两堆,一堆有A粒,另一堆有B粒.他让萌萌和他一起按照下面的规则取糖果:每次可以任 ...

  6. Dmango cxrf 自定义分页 缓存 session 序列化 信号量 知识点

    参考https://www.cnblogs.com/wupeiqi/articles/5246483.html

  7. SpringCloud 教程 (四) docker部署spring cloud项目

    一.docker简介 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机). ...

  8. D - Cheerleaders(第三周)

    D - Cheerleaders 题目链接:https://vjudge.net/contest/154063#problem/D 题目大意: 给你一个 n∗m 的方格,现在有 k 个相同石子,我们要 ...

  9. 关于Java泛型实现原理的思考与一般用法示例总结

    面向对象的一个重要目标是对代码重用的支持.支持这个目标的一个重要机制就是泛型机制.在1.5版本之前,java并没有直接支持泛型实现,泛型编程的实现时通过使用继承的一些基本概念来完成的. 这种方式的局限 ...

  10. matlab 重命名文件和文件夹

    1.查看文件存在  dir() 若存在,返回文件信息      dir(‘test.txt’) %查看当前目录是否存在test.txt文件 dir(‘C:\test.txt’) %查看指定目录是否存在 ...