首先想到的是并查集,然后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. NOIP2016 D2T2 蚯蚓

    洛谷P2827 其实是一道不是很难的模拟题,暴力好像可以拿80,AC的话要发现其中隐含的单调性 首先是一个小技巧,每次将所有蚯蚓的长度都+q肯定时间复杂度很大,那我们就想,其他所有的蚯蚓加,就相当于取 ...

  2. Javascript获取页面元素相对和绝对位置

    制作网页的过程中,你有时候需要知道某个元素在网页上的确切位置. 下面的教程总结了Javascript在网页定位方面的相关知识. 一.网页的大小和浏览器窗口的大小 首先,要明确两个基本概念. 一张网页的 ...

  3. 8,HashMap子类-LinkedHashMap

    在上一篇随笔中,分析了HashMap的源码,里面涉及到了3个钩子函数(afterNodeAccess(e),afterNodeInsertion(evict),afterNodeRemoval(nod ...

  4. Java——开发环境配置

    [1]JDK的安装与卸载 (1)卸载程序         控制面板--添加或删除程序--J2SE Development Kit和J2SE Runtime Envioroment--删除 (2)安装程 ...

  5. laravel5.6 邮件队列database驱动简单demo

    一: 邮件初始参数配置 配置 .env  (demo示例是163邮箱,开启POP3和SMTP服务,获取授权密码) MAIL_DRIVER=smtp MAIL_HOST=smtp.163.com MAI ...

  6. cdn for js library

    https://cdnjs.com/libraries/jquery https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.js htt ...

  7. java实现多种加密模式的AES算法-总有一种你用的着

    https://blog.csdn.net/u013871100/article/details/80100992 AES-128位-无向量-ECB/PKCS7Padding package com. ...

  8. nacos 使用 servlet 异步处理客户端配置长轮询

    config 客户端 ClientWorker#ClientWorker 构造方法中启动定时任务 ClientWorker.LongPollingRunnable 长轮询的任务,在 run 方法的结尾 ...

  9. Week2 - 669. Trim a Binary Search Tree & 617. Merge Two Binary Trees

    Week2 - 669. Trim a Binary Search Tree & 617. Merge Two Binary Trees 669.Trim a Binary Search Tr ...

  10. Delphi控件-复合控件

     http://blog.csdn.net/cml2030/article/details/3166634 Delphi控件-复合控件 标签: delphidestructorbuttonstring ...