HDU 1198
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) : hdu 1198
题目转自hdu 1198,题目传送门 题目大意: 给你11种单位水管摆放位置,若上下或左右有水管连接则视为这两点相连. 最后让你求这些张图中有几个连通块. 解题思路: 本来觉得这道题很简单,不就一个建 ...
- hdu 1198 (并查集 or dfs) Farm Irrigation
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1198 有题目图11种土地块,块中的绿色线条为土地块中修好的水渠,现在一片土地由上述的各种土地块组成,需要浇 ...
- hdu 1198 Farm Irrigation(深搜dfs || 并查集)
转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm ...
- HDU 1198 Farm Irrigation(状态压缩+DFS)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1198 题目: Farm Irrigation Time Limit: 2000/1000 MS (Ja ...
- HDU 1198 Farm Irrigation (并查集优化,构图)
本题和HDU畅通project类似.仅仅只是畅通project给出了数的连通关系, 而此题须要自己推断连通关系,即两个水管能否够连接到一起,也是本题的难点所在. 记录状态.不断combine(),注意 ...
- hdu.1198.Farm Irrigation(dfs +放大建图)
Farm Irrigation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1198(并查集)
题意:给你11个图,每一个都有管道,然后给一张由这11个正方形中的n个组成的图,判断有几条连通的管道: 思路:在大一暑假的时候做过这道题,当时是当暴力来做的,正解是并查集,需要进行一下转换: 转换1: ...
- hdu 1198 Farm Irrigation
令人蛋疼的并查集…… 我居然做了大量的枚举,居然过了,我越来越佩服自己了 这个题有些像一个叫做“水管工”的游戏.给你一个m*n的图,每个单位可以有11种选择,然后相邻两个图只有都和对方连接,才判断他们 ...
- HDU 1198 Farm Irrigation (并检查集合 和 dfs两种实现)
Farm Irrigation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
随机推荐
- python 面向对象编程学习总结
面向对象是个抽象的东西,概念比较多,下面会一一介绍. 一.类和实例 类(Class)和实例(Instance)是面向对象最重要的概念. 类是指抽象出的模板.实例则是根据类创建出来的具体的“对象”,每个 ...
- Django RF:学习笔记(8)——快速开始
Django RF:学习笔记(8)——快速开始 安装配置 1.使用Pip安装Django REST Framework: pip install djangorestframework 2.在Sett ...
- Python: 复数的数学运算
写的最新的网络认证方案代码遇到了一个难题,唯一的解决办法就是使用复数空间,需要使用复数来执行一些计算操作. 复数可以用使用函数complex(real, imag) 或者是带有后缀j 的浮点数来指定. ...
- Redis 资料整理
Redis is an open source, BSD licensed, advanced key-value store. Redis is often referred to as a dat ...
- python webdriver 测试框架-数据驱动DDT的例子
先在cmd环境 运行 pip install ddt 安装数据驱动ddt模块 脚本: #encoding=utf-8 from selenium import webdriver import un ...
- RESTful源码笔记之RESTful Framework的APIview, Viewset总结分析
0x00 引言 官方文档:http://www.django-rest-framework.org/drf为我们提供强大的通用view的功能,本博客对这些view进行简要的总结分析.首先,我们看一下 ...
- 前端学习笔记之HTTP协议
阅读目录 一 HTTP协议简介 二 HTTP协议之请求Request 三 HTTP协议之响应Response 四 HTTP协议完整工作流程 五 HTTP协议关键性总结 六 自定义套接字分析HTTP协议 ...
- 学习Zookeeper之第2章Zookeeper安装
第 2 章 Zookeeper安装 2.1 本地模式安装部署 2.2 配置参数解读 第 2 章 Zookeeper安装 2.1 本地模式安装部署 1)安装前准备: (1)安装 jdk (2)通过 fi ...
- uboot能ping通本机无法ping通本机上搭建的虚拟机
注意 转载请注明出处:https://www.cnblogs.com/dakewei 一.背景 1.1 uboot不能被其它主机ping通,这是由于uboot没有对其它主机发送过来的arp包进行响应, ...
- Tensorflow1.5.0+cuda9.0+cudnn7.0+gtx1080+ubuntu16.04
目录 Tensorflow1.5.0+cuda9.0+cudnn7.0+gtx1080+ubuntu16.04 0. 前记 1. 环境说明 2. 安装GTX1080显卡驱动 3. CUDA 9.0安装 ...