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 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可 ...
随机推荐
- [wikioi 1519]过路费(最小生成树+树链剖分)
题目:http://www.wikioi.com/problem/1519/ 题意:给你一个连通的无向图,每条边都有权值,给你若干个询问(x,y),要输出从x到y的路径上边的最大值的最小值 分析:首先 ...
- [c#基础]集合foreach的必要条件和自定义集合
引言 最近翻看了之前的学习笔记,看到foreach,记得当时老师讲的时候,有点犯浑,不是很明白,这好比,上小学时,你不会乘法口诀,但是随着时间的增长,你不自觉的都会了,也悟出个小道理,有些东西,你当时 ...
- 小记:事务(进程 ID 56)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。
今天在做SQL并发UPDATE时遇到一个异常:(代码如下) //Parallel 类可产生并发操作(即多线程) Parallel.ForEach(topics, topic => { //DBH ...
- 多个TableView的练习
效果图: 左边图片的代码: // // SecViewController.m // UI__多个TableView练习 // // Created by dllo on 16/3/17. // Co ...
- All thanks
How to make a salad?——Silun Wang 这是一次成功的团队合作,我为所有组员感到骄傲和自豪!感谢你们! 上个学期期末,和@老钱他们一起去五道口吃Pizza,谈到了大三上学期的 ...
- 如何正确地使用Entity Framework Database First
毕设依旧在不紧不慢地以每天解决一个问题的进度进行中.今天遇到的问题就是在建立数据模型时遇到的.因为项目是基于数据库构建的,所以理所应当地采用DB First来构造实体类和DbContext类.于是想也 ...
- Linux大文件已删除,但df查看已使用的空间并未减少解决
在我的生活当中遇到磁盘快满了,这时候准备去删除一些大文件 于是我使用ncdu 查看了一下当前系统占用资源比较多的是那些文件,结果一看是elasticsearch的日志文件,好吧,竟然找到源头了,那就把 ...
- .Net MVC中访问PC网页时,自动切换到移动端对应页面
随着移动端的流行,越来越的网站,除了提供PC网页之外,也提供了移动端的H5页面,手机在访问www.xxx.com的时候,能自动跳转到mobile.xxx.com.网上很多在实现时也能使用JS直接进行跳 ...
- Servlet Study 1
this content below are come from the JSR154 by sun Just for record purpose. if this relate to some ...
- chrom_input_click
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...