2014.8.3情人节欢乐赛【Benny的农场】
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的农场】的更多相关文章
- contesthunter CH Round #64 - MFOI杯水题欢乐赛day1 solve
http://www.contesthunter.org/contest/CH Round %2364 - MFOI杯水题欢乐赛 day1/Solve Solve CH Round #64 - MFO ...
- i春秋第二届春秋欢乐赛RSA256writeup
i春秋第二届春秋欢乐赛writeup 下载之后进行解压 发现四个文件 0x01看到题目是RSA的 又看到public.key 所以直接用kali linux的openssl 0x02可以看到e就是E ...
- 2014-10-24 NOIP欢乐赛
10-24NOIP欢乐赛 ——By 潘智力 题目名称 分火腿 无聊的会议 班服 时间限制 1s 1s 1s 内存限制 64MB 128MB 128MB 输入文件 hdogs.in meeting.in ...
- Comet OJ 夏季欢乐赛 篮球校赛
Comet OJ 夏季欢乐赛 篮球校赛 题目传送门 题目描述 JWJU注重培养学生的"唱,跳,rap,篮球"能力.于是每年JWJU都会举办篮球校赛,来给同学们一个切磋篮球技术的平台 ...
- Comet OJ 夏季欢乐赛 Gree的心房
Comet OJ 夏季欢乐赛 Gree的心房 题目传送门 题目描述 据说每一个走进Gree哥哥心房的小姑娘都没有能够再走出来-- 我们将Gree哥哥的心房抽象成一个n \times mn×m的地图,初 ...
- Comet OJ 夏季欢乐赛 分配学号
Comet OJ 夏季欢乐赛 H 分配学号 题目传送门 题目描述 今天,是JWJU给同学们分配学号的一天!为了让大家尽可能的得到自己想要的学号,鸡尾酒让大家先从 [1,10^{18}][1,1018] ...
- Comet OJ 2019 夏季欢乐赛题解
Comet OJ 2019 夏季欢乐赛题解 我是来骗访问量的 A 完全k叉树 \(n\)个点的完全k叉树的直径. 直接做 B 距离产生美 直接做 C 烤面包片 \(n!!!\mod p\) 显然\(n ...
- 【题解】Comet OJ 国庆欢乐赛 简要题解
[题解]Comet OJ 国庆欢乐赛 简要题解 A 直接做 B 直接做,结论: \[ ans=\max([Max\ge \mathrm{sum}] Max,s[n]/2) \] C 考虑这样一个做法: ...
- 2014北邮新生归来赛解题报告a-c
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
随机推荐
- SuperSpider——打造功能强大的爬虫利器
SuperSpider——打造功能强大的爬虫利器 1.爬虫的介绍 图1-1 爬虫(spider) 网络爬虫(web spider)是一个自动的通过网络抓取互联网 上的网页的程序,在当今互联网 中 ...
- SQLLoader4(数据文件中的列与表中列不一致情况-filler)
A.数据文件中字段个数少于表中列字段个数,但数据文件中缺少的列,在表定义中可以为空.----- 这种情况是比较简单的,只需要将数据文件中数据对应的列的名字写到控制文件中即可.因为SQL*Loader是 ...
- Git新建本地分支与远程分支关联问题:git branch --set-upstream
Git新建本地分支与远程分支关联问题:git branch --set-upstream git在本地新建分支, push到remote服务器上之后,再次pull下来的时候,如果不做处理会报以下提示: ...
- OC——UIlabel text的常规应用
UILabel *downloader = [[UILabel alloc]init]; NSString *downloadCount = [[LibraryArr objectAtIndex:in ...
- C++文件
参考: C++文件读写详解(ofstream,ifstream,fstream):http://blog.csdn.net/kingstar158/article/details/6859379 fs ...
- UVA 221 - Urban Elevations(离散化)!!!!!!
题意:给出一张俯视图.给出N个建筑物的左下标,长度,宽度,高度.现在求,从南面看,能看到那些建筑? Sample Input 14 160 0 30 60 30 125 0 32 28 60 95 0 ...
- (原)在ubuntu 中安装 swi prolog 和 简单的使用
参考网址:http://www0.cs.ucl.ac.uk/staff/mahmed/teaching/intro.html 参考网址:http://www.swi-prolog.org/build/ ...
- <正见>摘抄
1- 没有全能的力量能够扭转死亡之路,因此也就不会困在期待之中.如果没有盲目的期待,就不会有失望,如果能够了解一切都是无常,就不会攀缘执著.如果不攀缘执著,就不会患得患失,也才能真正完完全全地活着. ...
- CentOS 6.4 下安装 Apache
下载地址:http://mirror.bit.edu.cn/ 参数 描述 prefix 安装目录 enable-rewrite 开启 rewrite 模块 sysconfdir 配置文件目录 ./co ...
- python运维开发(十六)----Dom&&jQuery
内容目录: Dom 查找 操作 事件 jQuery 查找 筛选 操作 事件 扩展 Dom 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它 ...