http://acm.hdu.edu.cn/showproblem.php?pid=1198

裸并查集,主要工作在根据题目给出关系构图

#include <iostream>
#include <cstdio>
#include <map>
using namespace std ;
int idx[] ;
int m,n ;
char M[][] ;
int find(int x)
{
return idx[x]==x ? x : idx[x]=find(idx[x]) ;
}
int st ;
int dx[]={,-,,} ;
int dy[]={,,,-} ;
void check()
{
for(int i= ;i<m ;i++)
{
for(int j= ;j<n ;j++)
{
for(int k= ;k< ;k++)
{
int xx=i+dx[k] ;
int yy=j+dy[k] ;
if(xx< || xx>=m || yy< || yy>=n)continue ;
char t1=M[i][j] ;
char t2=M[xx][yy] ;
if(dx[k]==)
{
if((t1=='C' || t1=='D' || t1=='E' || t1=='H' || t1=='I' || t1=='J' || t1=='K') && (t2=='A' || t2=='B' || t2=='E' || t2=='G' || t2=='H' || t2=='J' || t2=='K'))
{
int pp=find(st) ;
int qq=find(st+n) ;
if(pp!=qq)
{
idx[pp]=qq ;
}
}
}
else if(dx[k]==-)
{
if((t1=='A' || t1=='B' || t1=='E' || t1=='H' || t1=='G' || t1=='J' || t1=='K') && (t2=='C' || t2=='D' || t2=='E' || t2=='H' || t2=='I' || t2=='J' || t2=='K'))
{
int pp=find(st) ;
int qq=find(st-n) ;
if(pp!=qq)
{
idx[pp]=qq ;
}
}
}
else if(dy[k]==)
{
if((t1=='B' || t1=='D' || t1=='F' || t1=='G' || t1=='I' || t1=='J' || t1=='K') && (t2=='A' || t2=='C' || t2=='F' || t2=='G' || t2=='H' || t2=='I' || t2=='K'))
{
int pp=find(st) ;
int qq=find(st+) ;
if(pp!=qq)
{
idx[pp]=qq ;
}
}
}
else if(dy[k]==-)
{
if((t1=='A' || t1=='C' || t1=='F' || t1=='G' || t1=='I' || t1=='H' || t1=='K') && (t2=='B' || t2=='D' || t2=='F' || t2=='G' || t2=='I' || t2=='J' || t2=='K'))
{
int pp=find(st) ;
int qq=find(st-) ;
if(pp!=qq)
{
idx[pp]=qq ;
}
}
}
}
st++ ;
}
}
}
int main()
{
while(~scanf("%d%d",&m,&n))
{
if(m==- && n==-)break ;
for(int i= ;i<m ;i++)
scanf("%s",M[i]) ;
for(int i= ;i<=n*m ;i++)
idx[i]=i ;
st= ;
check() ;
map <int,int> mp ;
int ans= ;
for(int i= ;i<=n*m ;i++)
{
int fa=find(i) ;
if(!mp[fa])
{
mp[fa]= ;
ans++ ;
}
}
printf("%d\n",ans) ;
}
return ;
}

HDU 1198的更多相关文章

  1. 图论问题(1) : hdu 1198

    题目转自hdu 1198,题目传送门 题目大意: 给你11种单位水管摆放位置,若上下或左右有水管连接则视为这两点相连. 最后让你求这些张图中有几个连通块. 解题思路: 本来觉得这道题很简单,不就一个建 ...

  2. hdu 1198 (并查集 or dfs) Farm Irrigation

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1198 有题目图11种土地块,块中的绿色线条为土地块中修好的水渠,现在一片土地由上述的各种土地块组成,需要浇 ...

  3. hdu 1198 Farm Irrigation(深搜dfs || 并查集)

    转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm ...

  4. HDU 1198 Farm Irrigation(状态压缩+DFS)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1198 题目: Farm Irrigation Time Limit: 2000/1000 MS (Ja ...

  5. HDU 1198 Farm Irrigation (并查集优化,构图)

    本题和HDU畅通project类似.仅仅只是畅通project给出了数的连通关系, 而此题须要自己推断连通关系,即两个水管能否够连接到一起,也是本题的难点所在. 记录状态.不断combine(),注意 ...

  6. hdu.1198.Farm Irrigation(dfs +放大建图)

    Farm Irrigation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. HDU 1198(并查集)

    题意:给你11个图,每一个都有管道,然后给一张由这11个正方形中的n个组成的图,判断有几条连通的管道: 思路:在大一暑假的时候做过这道题,当时是当暴力来做的,正解是并查集,需要进行一下转换: 转换1: ...

  8. hdu 1198 Farm Irrigation

    令人蛋疼的并查集…… 我居然做了大量的枚举,居然过了,我越来越佩服自己了 这个题有些像一个叫做“水管工”的游戏.给你一个m*n的图,每个单位可以有11种选择,然后相邻两个图只有都和对方连接,才判断他们 ...

  9. HDU 1198 Farm Irrigation (并检查集合 和 dfs两种实现)

    Farm Irrigation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

随机推荐

  1. Eclipse中如何查看使用的JDK版本

    有两种方法可以查看eclipse中jdk的版本: 第一种方法: 点击开始--运行--输入cmd--点击确定--在cmd命令行窗口中输入java -version,就可以显示出当前在使用的jdk的版本号 ...

  2. linux下抓包工具tcpdump详解

    本文转自:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 简介 用简单的话来定义tcpdump,就是:dump the ...

  3. BNUOJ 26474 Bread Sorting

    /*给出n个原始顺序的数,再给出要排成目标状态顺序,每次从第一个数列中选择三个,把这三个数中最右边的数放在最左边,然后其他两个数右 移一个单位,为你从原始状态能不能排序成目标状态. 本人YY的结论,从 ...

  4. postman--实现接口自动化测试

    postman使用 开发中经常用postman来测试接口,一个简单的注册接口用postman测试: 接口正常工作只是最基本的要求,经常要评估接口性能,进行压力测试. postman进行简单压力测试 下 ...

  5. SQL Server2008安装图解

    1).双击set.up安装:

  6. 百度语音识别vs科大讯飞语音识别

    一.结果 从笔者试验的结果来看,科大讯飞的语音识别技术远超百度语音识别 二.横向对比   科大讯飞语音识别 百度语音识别 费用 各功能的前5小时免费 全程免费 转换精准率 非常高 比较低 linux ...

  7. [问题解决]win10误删启动项(BCD)(HP电脑亲测,无需启动盘,并非重装系统)

    昨天使用easyBCD软件,开始不太懂,手残把win10的引导删除了,后来发现电脑关机总是变成重启,无奈强制关机.今天重启了一下电脑,发现电脑已经无法打开了,这才明白昨天是误删了win10的BCD. ...

  8. 【安装】ES的安装过程

    1.安装ES 首先我们需要去官网下载安装包  官方下载地址 下载后不需要编译,直接解压 解压后结构是这样的(2.5以上版本会有plugins目录,没有的需要手动创建) 方式一: 创建一个es用户(因为 ...

  9. HDU 1503 Advanced Fruits(LCS+记录路径)

    http://acm.hdu.edu.cn/showproblem.php?pid=1503 题意: 给出两个串,现在要确定一个尽量短的串,使得该串的子串包含了题目所给的两个串. 思路: 这道题目就是 ...

  10. Tensorflow一些常用基本概念与函数(二)

    1.tensorflow的基本运作 为了快速的熟悉TensorFlow编程,下面从一段简单的代码开始: import tensorflow as tf #定义‘符号’变量,也称为占位符 a = tf. ...