HDU1198水管并查集Farm Irrigation
Farm Irrigation
Figure 1
Benny has a map of his farm, which is an array of marks denoting the distribution of water pipes over the whole farm. For example, if he has a map
ADC
FJK
IHE
then the water pipes are distributed like

Figure 2
Several wellsprings are found in the center of some squares, so water can flow along the pipes from one square to another. If water flow crosses one square, the whole farm land in this square is irrigated and will have a good harvest in autumn.
Now Benny wants to know at least how many wellsprings should be found to have the whole farm land irrigated. Can you help him?
Note: In the above example, at least 3 wellsprings are needed, as those red points in Figure 2 show.
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
char a[55][55];
int pd[2505];
struct node
{
int l;
int r;
int u;
int d;
int num;
}que[55][55];
int get(int x)
{
if(pd[x]!=x)
pd[x]=get(pd[x]);
return pd[x];
}
void find(int x,int y)
{
pd[get(y)]=get(x);
}
int main()
{
int m,n;
while(scanf("%d%d",&m,&n)!=EOF)
{
if(m==-1&&n==-1)
break;
if(m==1&&n==1)
{
printf("1\n");
continue;
}
memset(pd,0,sizeof(pd));
memset(a,0,sizeof(a));
int N=n*m;
for(int i1=1;i1<=N;i1++)
pd[i1]=i1;
getchar();
for(int i2=0;i2<m;i2++)
{
for(int j2=0;j2<n;j2++)
scanf("%c",&a[i2][j2]);
getchar();
}
int h=1;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
if(a[i][j]=='A') {que[i][j].l=1;que[i][j].r=0;que[i][j].u=1;que[i][j].d=0;}
else if(a[i][j]=='B') {que[i][j].l=0;que[i][j].r=1;que[i][j].u=1;que[i][j].d=0;}
else if(a[i][j]=='C') {que[i][j].l=1;que[i][j].r=0;que[i][j].u=0;que[i][j].d=1;}
else if(a[i][j]=='D') {que[i][j].l=0;que[i][j].r=1;que[i][j].u=0;que[i][j].d=1;}
else if(a[i][j]=='E') {que[i][j].l=0;que[i][j].r=0;que[i][j].u=1;que[i][j].d=1;}
else if(a[i][j]=='F') {que[i][j].l=1;que[i][j].r=1;que[i][j].u=0;que[i][j].d=0;}
else if(a[i][j]=='G') {que[i][j].l=1;que[i][j].r=1;que[i][j].u=1;que[i][j].d=0;}
else if(a[i][j]=='H') {que[i][j].l=1;que[i][j].r=0;que[i][j].u=1;que[i][j].d=1;}
else if(a[i][j]=='I') {que[i][j].l=1;que[i][j].r=1;que[i][j].u=0;que[i][j].d=1;}
else if(a[i][j]=='J') {que[i][j].l=0;que[i][j].r=1;que[i][j].u=1;que[i][j].d=1;}
else {que[i][j].l=1;que[i][j].r=1;que[i][j].u=1;que[i][j].d=1;}
que[i][j].num=h;
h++;
}
for(int i3=0;i3<m;i3++)
for(int j3=0;j3<n;j3++)
{
if(j3<n-1)
{
if(que[i3][j3].r==1&&que[i3][j3+1].l==1)
find(que[i3][j3].num,que[i3][j3+1].num);
}
if(i3<m-1)
{
if(que[i3][j3].d==1&&que[i3+1][j3].u==1)
find(que[i3][j3].num,que[i3+1][j3].num);
}
}
int sum=0;
for(int i4=1;i4<=N;i4++)
{
if(pd[i4]==i4)
sum++;
}
printf("%d\n",sum);
}
return 0;
}
HDU1198水管并查集Farm Irrigation的更多相关文章
- hdu1198 普通的并查集
今天开始(第三轮)并查集,,之前学的忘了一些 本题很简单直接上代码 #include<iostream> #include<cstring> #include<cstdi ...
- hdu1198 Farm Irrigation —— dfs or 并查集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1198 dfs: #include<cstdio>//hdu1198 dfs #includ ...
- hdu1198 Farm Irrigation 并查集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1198 简单并查集 分别合并竖直方向和水平方向即可 代码: #include<iostream&g ...
- 【简单并查集】Farm Irrigation
Farm Irrigation Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Tot ...
- HDU 1198 Farm Irrigation(并查集,自己构造连通条件或者dfs)
Farm Irrigation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- hdu 1198 Farm Irrigation(深搜dfs || 并查集)
转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm ...
- hdu-1198 Farm Irrigation---并查集+模拟(附测试数据)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1198 题目大意: 有如上图11种土地块,块中的绿色线条为土地块中修好的水渠,现在一片土地由上述的各种 ...
- hdu 1198 Farm Irrigation(并查集)
题意: Benny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a ...
- 杭电OJ——1198 Farm Irrigation (并查集)
畅通工程 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可 ...
随机推荐
- ELK 部署
文章转载: http://www.open-open.com/doc/view/df156a76a824402482d1d72cd3b61e38 http://www.open-open.com/li ...
- Mvc多级Views目录 asp.net mvc4 路由重写及 修改view 的寻找视图的规则
一般我们在mvc开发过程中,都会碰到这样的问题.页面总是写在Views文件夹下,而且还只能一个Controller的页面只能写在相应的以 Controller名命名的文件夹下.如果我们写到别处呢?那么 ...
- OC基础--成员变量的封装
一.封装的作用: 1.重用 2.不必关心具体的实现 3.面向对象三大特征之一 4.具有安全性 二.OC中成员变量的命名规范以及注意事项 1.命名规范--.成员变量都以下划线“_”开头 1)为了跟get ...
- 【UVALive 7334】Kernel Knights
题 题意 有两个队的骑士1到n和n+1到2n,每个骑士只能互相攻击对手队的一个骑士.kernel的意思是在这个kernel里的骑士不会互相攻击,在kernel外的骑士被kernel里的骑士攻击. 现在 ...
- BZOJ1016 最小生成树计数
Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...
- TYVJP1933 绿豆蛙的归宿
背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都能够到达 ...
- HD1205吃糖果(鸽巢、抽屉原理)
吃糖果 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submiss ...
- 什么是领域模型(domain model)?贫血模型(anaemic domain model) 和充血模型(rich domain model)有什么区别
http://blog.csdn.net/helloboat/article/details/51208128 领域模型是领域内的概念类或现实世界中对象的可视化表示,又称为概念模型或分析对象模型,它专 ...
- jquery------使用jQuery的委托方法
index.jsp <div id="gallery"> <div class="photo"> <img src="a ...
- linux建立用户 详细
.你同时属于两个或两个以上的组. 两个条件你至少具备一个,你才能够把文件所属旧组变为新组.使用如下的命令将当前目录下所有html文件所属的组改为httpd: chgrp httpd *.html 和c ...