Benny的农场

(farm.pas/.c/.cpp)

时间限制:1s。空间限制:128MB

题目描述:

Benny有一片农田需要灌溉。农田的形状为矩形,并被分为许多小块。每一块中都有一些水管。共有11种类型的管道,如右图所示标号为A到K。

Benny有农场的地图,地图表明各小块中管道的形状。例如:

ADC

FJK

IHE

那么,整个农田的水管分布为下图:

现在要在一些小块中心建几个水源,灌溉用的水可以从水源所在的小块开始,沿管道流向其他小块。只有水流穿过一个小块,这个小块才会有好收成。

现在,Benny想知道至少要建多少个水源才能使整个农田收到灌溉。

注意:在上面的例子中,至少需要3个水源(红点所示),这是建水源的其中一种方案。

输入格式:

每个测试点有多组测试数据!

在每组测试数据中,第一行包含2个整数M和N,表示整块农田可分为M行N列的小块。接下来M行每行有N个字符,字符为“A”到“K”,表示每个小块的管道形状。

输入数据以输入M和N均为-1结束。数据范围1<=M,N≤50。

输出格式:

对于每组测试数据,输出最少所需水源数。

样例输入:

2 2

DK

HF

3 3

ADC

FJK

IHE

-1 -1

样例输出:

2

3

数据范围:10%的数据n,m<=5。30%的数据n,m<=50。100%的数据n,m<=500。40%的测试点最多不超过5组测试数据,100%的测试点最多不超过10组测试数据。

情人节欢乐赛……好像一点也不欢乐

这题直接读入完保存连通性,然后遍历一遍并查集水过……

#include<cstdio>
#include<cstring>
#define MAX 300000
int n,m;
int fa[MAX];s
bool link[MAX][4];
inline int getfa(int x)
{return fa[x]==x?x:fa[x]=getfa(fa[x]);}
inline void work()
{
char ch[510];
memset(link,0,sizeof(link));
int piece=n*m,now,d,fn,fd;
for (int i=1;i<=n*m;i++)fa[i]=i;
for (int i=1;i<=n;i++)
{
scanf("%s",ch);
for (int j=0;j<m;j++)
{
now=(i-1)*m+j+1;
char c=ch[j];
if (c=='A'){link[now][1]=1;link[now][2]=1;continue;}
if (c=='B'){link[now][2]=1;link[now][3]=1;continue;}
if (c=='C'){link[now][1]=1;link[now][4]=1;continue;}
if (c=='D'){link[now][3]=1;link[now][4]=1;continue;}
if (c=='E'){link[now][2]=1;link[now][4]=1;continue;}
if (c=='F'){link[now][1]=1;link[now][3]=1;continue;}
if (c=='G'){link[now][1]=1;link[now][2]=1;link[now][3]=1;continue;}
if (c=='H'){link[now][1]=1;link[now][2]=1;link[now][4]=1;continue;}
if (c=='I'){link[now][1]=1;link[now][3]=1;link[now][4]=1;continue;}
if (c=='J'){link[now][2]=1;link[now][3]=1;link[now][4]=1;continue;}
if (c=='K'){link[now][1]=1;link[now][2]=1;link[now][3]=1;link[now][4]=1;}
}
}
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
{
now=(i-1)*m+j;
if (m-j)
{
d=(i-1)*m+j+1;
if (link[now][3]&&link[d][1])
{
fn=getfa(now);
fd=getfa(d);
if (fn!=fd)
{
piece--;
fa[fd]=fn;
}
}
}
if (n-i)
{
d=i*m+j;
if (link[now][4]&&link[d][2])
{
fn=getfa(now);
fd=getfa(d);
if (fn!=fd)
{
piece--;
fa[fd]=fn;
}
}
}
}
printf("%d\n",piece);
}
int main()
{
freopen("farm.in","r",stdin);
freopen("farm.out","w",stdout);
while (scanf("%d%d",&n,&m)&&n+1&&m+1)work();
}

2014.8.3情人节欢乐赛【Benny的农场】的更多相关文章

  1. contesthunter CH Round #64 - MFOI杯水题欢乐赛day1 solve

    http://www.contesthunter.org/contest/CH Round %2364 - MFOI杯水题欢乐赛 day1/Solve Solve CH Round #64 - MFO ...

  2. i春秋第二届春秋欢乐赛RSA256writeup

    i春秋第二届春秋欢乐赛writeup 下载之后进行解压 发现四个文件 0x01看到题目是RSA的  又看到public.key 所以直接用kali linux的openssl 0x02可以看到e就是E ...

  3. 2014-10-24 NOIP欢乐赛

    10-24NOIP欢乐赛 ——By 潘智力 题目名称 分火腿 无聊的会议 班服 时间限制 1s 1s 1s 内存限制 64MB 128MB 128MB 输入文件 hdogs.in meeting.in ...

  4. Comet OJ 夏季欢乐赛 篮球校赛

    Comet OJ 夏季欢乐赛 篮球校赛 题目传送门 题目描述 JWJU注重培养学生的"唱,跳,rap,篮球"能力.于是每年JWJU都会举办篮球校赛,来给同学们一个切磋篮球技术的平台 ...

  5. Comet OJ 夏季欢乐赛 Gree的心房

    Comet OJ 夏季欢乐赛 Gree的心房 题目传送门 题目描述 据说每一个走进Gree哥哥心房的小姑娘都没有能够再走出来-- 我们将Gree哥哥的心房抽象成一个n \times mn×m的地图,初 ...

  6. Comet OJ 夏季欢乐赛 分配学号

    Comet OJ 夏季欢乐赛 H 分配学号 题目传送门 题目描述 今天,是JWJU给同学们分配学号的一天!为了让大家尽可能的得到自己想要的学号,鸡尾酒让大家先从 [1,10^{18}][1,1018] ...

  7. Comet OJ 2019 夏季欢乐赛题解

    Comet OJ 2019 夏季欢乐赛题解 我是来骗访问量的 A 完全k叉树 \(n\)个点的完全k叉树的直径. 直接做 B 距离产生美 直接做 C 烤面包片 \(n!!!\mod p\) 显然\(n ...

  8. 【题解】Comet OJ 国庆欢乐赛 简要题解

    [题解]Comet OJ 国庆欢乐赛 简要题解 A 直接做 B 直接做,结论: \[ ans=\max([Max\ge \mathrm{sum}] Max,s[n]/2) \] C 考虑这样一个做法: ...

  9. 2014北邮新生归来赛解题报告a-c

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

随机推荐

  1. SuperSpider——打造功能强大的爬虫利器

    SuperSpider——打造功能强大的爬虫利器   1.爬虫的介绍 图1-1  爬虫(spider) 网络爬虫(web spider)是一个自动的通过网络抓取互联网 上的网页的程序,在当今互联网 中 ...

  2. SQLLoader4(数据文件中的列与表中列不一致情况-filler)

    A.数据文件中字段个数少于表中列字段个数,但数据文件中缺少的列,在表定义中可以为空.----- 这种情况是比较简单的,只需要将数据文件中数据对应的列的名字写到控制文件中即可.因为SQL*Loader是 ...

  3. Git新建本地分支与远程分支关联问题:git branch --set-upstream

    Git新建本地分支与远程分支关联问题:git branch --set-upstream git在本地新建分支, push到remote服务器上之后,再次pull下来的时候,如果不做处理会报以下提示: ...

  4. OC——UIlabel text的常规应用

    UILabel *downloader = [[UILabel alloc]init]; NSString *downloadCount = [[LibraryArr objectAtIndex:in ...

  5. C++文件

    参考: C++文件读写详解(ofstream,ifstream,fstream):http://blog.csdn.net/kingstar158/article/details/6859379 fs ...

  6. UVA 221 - Urban Elevations(离散化)!!!!!!

    题意:给出一张俯视图.给出N个建筑物的左下标,长度,宽度,高度.现在求,从南面看,能看到那些建筑? Sample Input 14 160 0 30 60 30 125 0 32 28 60 95 0 ...

  7. (原)在ubuntu 中安装 swi prolog 和 简单的使用

    参考网址:http://www0.cs.ucl.ac.uk/staff/mahmed/teaching/intro.html 参考网址:http://www.swi-prolog.org/build/ ...

  8. <正见>摘抄

    1- 没有全能的力量能够扭转死亡之路,因此也就不会困在期待之中.如果没有盲目的期待,就不会有失望,如果能够了解一切都是无常,就不会攀缘执著.如果不攀缘执著,就不会患得患失,也才能真正完完全全地活着. ...

  9. CentOS 6.4 下安装 Apache

    下载地址:http://mirror.bit.edu.cn/ 参数 描述 prefix 安装目录 enable-rewrite 开启 rewrite 模块 sysconfdir 配置文件目录 ./co ...

  10. python运维开发(十六)----Dom&&jQuery

    内容目录: Dom 查找 操作 事件 jQuery 查找 筛选 操作 事件 扩展 Dom 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它 ...