bzoj1104: [POI2007]洪水pow
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#define maxn 1005
#define maxm 1000005
using namespace std;
int m,n,ans,hi[maxm],fa[maxm],now[maxn],prep[maxm],bo[maxm];
bool color[maxm];
void add(int x,int y){
prep[x]=now[y],now[y]=x;
}
int find(int x){
if (fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
void Connect(int x,int y){
int t1,t2;
t1=find(x),t2=find(y);
if (t1==t2) return;
if (bo[t1]==) fa[t2]=t1;
else fa[t1]=t2;
}
void connect(int x){
if (x>n&&hi[x]>=hi[x-n]) Connect(x-n,x);
if (x<=(n*m-n)&&hi[x]>=hi[x+n]) Connect(x+n,x);
if ((x%n)!=&&hi[x]>=hi[x-]) Connect(x-,x);
if ((x%n)!=&&hi[x]>=hi[x+]) Connect(x+,x);
}
int main(){
scanf("%d%d",&m,&n);
for (int i=;i<=m;i++){
for (int u,v,j=;j<=n;j++){
scanf("%d",&u),v=(i-)*n+j;
if (u>) color[v]=,hi[v]=u;
else color[v]=,hi[v]=-u;
}
}
memset(now,,sizeof(now)),ans=;
for (int i=;i<=n*m;i++) add(i,hi[i]);
for (int i=;i<=n*m;i++) fa[i]=i;
memset(bo,,sizeof(bo));
for (int i=;i<=;i++){
for (int u=now[i];u;u=prep[u]){
connect(u);
}
for (int u=now[i];u;u=prep[u]){
int v=find(u);
if (!bo[v]&&color[u]==) ans++,bo[v]=;
}
}
printf("%d\n",ans);
return ;
}
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1104
做法:我们将所有的点按高度进行排序,排完序后以此加入这些点,加入时,我们用把四周比它矮的点并到一个集合当中,因为可能已有抽水机了,并完后,如果这是该市的一个区域,且它所在集合中没有抽水机,那么我们就在该集合放一架抽水机,否则跳过。注意高度相同的点。
并查集+贪心+poi思路题。
bzoj1104: [POI2007]洪水pow的更多相关文章
- [POI2007]洪水pow 题解
[POI2007]洪水pow 时间限制: 5 Sec 内存限制: 128 MB 题目描述 AKD市处在一个四面环山的谷地里.最近一场大暴雨引发了洪水,AKD市全被水淹没了.Blue Mary,AKD ...
- [POI2007]洪水pow
Description AKD市处在一个四面环山的谷地里.最近一场大暴雨引发了洪水,AKD市全被水淹没了.Blue Mary,AKD市的市长,召集了他的所有顾问(包括你)参加一个紧急会议.经过细致的商 ...
- 【BZOJ】1104: [POI2007]洪水pow
题意 给一个\(n * m(1 \le n, m \le 1000)\)的矩阵,如果\(a_{i, j}\)为正表示城市.\(|a_{i, j}|(|a_{i, j}| \le 1000)\)是格子\ ...
- [POI2007]洪水pow 并查集
我们先得出一个结论:水泵要建在城市上.因为如果在非城市上建能把其他一些城市抽干,那么在城市上建也是一个效果(自己画图感性理解一下) 然后我们明白抽水的条件:周围的高度要>=自身的高度,这样会抽完 ...
- [POI2007]洪水pow bfs
发现:只在所有自己的城市建水泵一定是最优解. 所以对自己的城市按高度排序,该城市不用建的前提是从他出发经过一条高度都小于等于他的路径能到达一个已经修建水泵的 sort+bfs...... #inclu ...
- 并查集 - BZOJ 1104 [POI2007]洪水
BZOJ 1104 [POI2007]洪水 描述 AKD 市处在一个四面环山的谷地里.最近一场大暴雨引发了洪水,AKD 市全被水淹没了.Blue Mary,AKD 市的市长,召集了他的所有顾问(包括你 ...
- 洪水 Pow
Description AKD市处在一个四面环山的谷地里.最近一场大暴雨引发了洪水,AKD市全被水淹没了.Blue Mary,AKD市的市长,召集了他的所有顾问(包括你)参加一个紧急会议.经过细致的商 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- [洛谷3457][POI2007]POW-The Flood
洛谷题目链接:[POI2007]POW-The Flood 题意翻译 Description 你手头有一张该市的地图.这张地图是边长为 m∗n 的矩形,被划分为m∗n个1∗1的小正方形.对于每个小正方 ...
随机推荐
- WP老杨解迷:发布包多少大小合适
有位做安卓的老兄这样描述发布包大小问题:发布包和女人一样,新包如年轻女子,不能太瘦,太瘦没有货,所以大家都喜欢身段窈窕的少女,正火的产品如中年妇女,要得是风韵魅力,胖瘦已经不那么重要,但是也不能太胖, ...
- [转]解决GET请求时中文乱码的问题
原文地址:http://www.cnblogs.com/liukemng/p/4178882.html 之前项目中的web.xml中的编码设置: <filter> <filter-n ...
- 实现路由的RouterMiddleware中间件
实现路由的RouterMiddleware中间件 虽然ASP.NET Core应用的路由是通过RouterMiddleware这个中间件来完成的,但是具体的路由解析功能都落在指定的Router对象上, ...
- android:ToolBar详解(手把手教程)(转)
来源 http://blog.mosil.biz/2014/10/android-toolbar/ 编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅 ...
- mac上远程连接windows
Microsoft 适用于 Mac 的远程桌面连接客户端 2.1.1 http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=1814 ...
- Oracle 数据库日常巡检
1. 检查数据库基本状况 包含:检查Oracle实例状态,检查Oracle服务进程,检查Oracle监听进程,共三个部分. 1.1. 检查Oracle实例状态 select instance_name ...
- Java语法笔记
目录 知识点 不支持 恶心事 与C#的区别 组件 学习资料 母版页 知识点 类 静态方法,即可以在类上被调用,也可以在实例对象上被调用. Java类 先执行静态构造函数,再执行静态方法或静态字段,所以 ...
- 17-tail 简明笔记
显示文件的最后一部分(尾部) tail [options] [file-list] 参数 file-list是tail要显示的文件的路径名列表.当制定多个文件时,tail在显示每个文件的内容之前先显示 ...
- 一个Activity掌握Design新控件 (转)
原文地址:http://blog.csdn.net/lavor_zl/article/details/51295364 谷歌在推出Android5.0的同时推出了全新的设计Material Desig ...
- Django-Json 数据返回
1 .引入Json import json json.dumps(数据)