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) ...
随机推荐
- bzoj1752 [Usaco2005 qua]Til the Cows Come Home
Description Bessie is out in the field and wants to get back to the barn to get as much sleep as pos ...
- IT人员应该怎么跳槽
中国的程序员只有两个状态,刚跳槽和准备跳槽. 中国IT行业的快速发展对IT从业人员的需求不断扩大,记得08年刚毕业的时候,在帝都找一个3k的工作都让我特别满足,现在仅能写出”hello world ...
- Unity编辑器-创建单独编辑框,折叠框,提示框
今天我们就来学习如何创建一个编辑框,上面绘制一个折叠框里面有四种消息框. 代码如下: using UnityEngine; using System.Collections; using UnityE ...
- 简易的C/S系统(实现两个数的和)
//Client:#include <string.h> #include <sys/socket.h> #include <stdio.h> #include & ...
- cocos2dx 编写shader 遇到 溢出问题
在 编程语言中,不论什么 数据类型 都有 各种 的 局限,无法 表示 现实世界中的 不论什么 情况. 比如 int ,char 会 溢出,float 会 有 溢出 以及 精度 不准确的 情况. 所以 ...
- 对于Android Service 生命周期进行全解析
应用程序组件有一个生命周期——一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激 活状态:对于活动,对用户有时候可见,有时候不可见.组件生命周 ...
- Rss 的作用 及使用方法
也可以参考http://jingyan.baidu.com/article/e73e26c0c73e1f24adb6a70f.html 什么是RSS RSS是站点用来和其他站点之间共享内容的一种简易方 ...
- maven ClassNotFoundException: org.springframework.web.context.ContextLoader
信息: Starting Servlet Engine: Apache Tomcat/6.0.32 2012-3-31 9:39:40 org.apache.catalina.core.Standar ...
- 如何搞定前端资源服务跨域问题之nginx篇
问题描述 1.首先让我们先看一张图 2.从图中,我们可以很清楚的看到当http请求的站点访问https的资源的时候会报出“Cross-Origin”跨域的问题.为什么会出现这样的错误,这是因为涉及到“ ...
- asp.net利用Ajax和Jquery在前台向后台传参数并返回值
1----------前台 首先需要 Jquer的包 <script src="js/jquery-1.9.1.js" type="text/javascript& ...