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) ...
随机推荐
- 车祸 shit
今天上班的时候就觉得右眼在那跳,妈的,果不其然,回家路上自行车也跟人家撞上了,郁闷,裤子也坏了,腿也伤了.我还没反应过来,撞一起的是个女的,十七八岁吧,郁闷,什么破自行车.强烈呼吁不要去买小自行车了, ...
- 【转】git与github在ubuntu下的使用 -- 不错
原文网址:http://www.cnblogs.com/cocowool/archive/2010/10/19/1855616.html 最近开始使用git对kohana3的文档做一些补充的工作,使用 ...
- ActionResult解析
原文地址:http://blog.csdn.net/gulijiang2008/article/details/7642213 ActionResult是一个抽象类, 在Action中返回的都是其派生 ...
- C++小知识之sprintf用法
sprintf 字串格式化命令,主要功能是把格式化的数据写入某个字符串中.sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误,但好在由sprintf ...
- tabbar 嵌套 navigation
-------------- 源代码:点击打开链接 ------------------------ AppDelegate.m - (BOOL)application:(UIApplication ...
- win环境下mysql5.6.14的所有变量的默认值
在windows mysql5.6.14 x64版本下my.ini如下: [mysqld] port = 3306 socket = /tmp/mysql.sock basedir=D:/wamp ...
- web前端之 HTML介绍
概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏览器 ...
- python学习之路-12
线程池 上下文管理 线程池中关于上下文管理的相关代码 点我查看更详细的上下文管理介绍 import contextlib @contextlib.contextmanager def worker_s ...
- Vijos1051. 送给圣诞夜的极光
试题请參见: https://vijos.org/p/1051 题目概述 圣诞老人回到了北极圣诞区, 已经快到12点了. 也就是说极光表演要開始了. 这里的极光不是极地特有的自然极光景象. 而是圣诞老 ...
- Docker image 镜像介绍
操作镜像 使用 docker 命令行操作 docker 镜像 获取镜像 使用「docker pull +镜像名称」从网络上下载image镜像 core@localhost ~ $ docker pul ...