bzoj 2007 [Noi2010]海拔——最小割转最短路

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2007

一个点的高度一定不是0就是1。答案一定形如一个左上角的连通块全是0的点、一个右下角的连通块全是1的点。

注意从东到西还有从南到北的边也有用!因为不一定是一个阶梯形的,还可以拐来拐去,只是一定是两个连通块罢了。

所以最小割一下那个分界线就行了。但会TLE。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=500*501+5,M=4000*501+5,INF=2e6+5;
int n,t,bh[505][505],hd[N],xnt=1,cur[N],to[M],nxt[M],cap[M];
int dfn[N],q[N],he,tl;
int Mn(int a,int b){return a<b?a:b;}
int rdn()
{int ret=0;bool fx=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')fx=0;ch=getchar();}while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();return fx?ret:-ret;
}
void add(int x,int y,int z)
{to[++xnt]=y;nxt[xnt]=hd[x];hd[x]=xnt;cap[xnt]=z;to[++xnt]=x;nxt[xnt]=hd[y];hd[y]=xnt;cap[xnt]=0;
}
bool bfs()
{memset(dfn,0,sizeof dfn);dfn[0]=1;q[he=tl=1]=0;while(he<=tl){int k=q[he++];for(int i=hd[k],v;i;i=nxt[i])if(cap[i]&&!dfn[v=to[i]])dfn[v]=dfn[k]+1,q[++tl]=v;}return dfn[t];
}
int dinic(int cr,int flow)
{if(cr==t)return flow;int use=0;for(int& i=cur[cr],v;i;i=nxt[i])if(cap[i]&&dfn[v=to[i]]==dfn[cr]+1){int tmp=dinic(v,Mn(flow-use,cap[i]));if(!tmp)dfn[v]=0;use+=tmp;cap[i]-=tmp;cap[i^1]+=tmp;if(use==flow)return use;}return use;
}
int main()
{n=rdn();for(int i=0;i<=n;i++)for(int j=0;j<=n;j++)bh[i][j]=t++;t--; int d;for(int i=0;i<=n;i++)for(int j=1;j<=n;j++)d=rdn(),add(bh[i][j-1],bh[i][j],d);for(int i=1;i<=n;i++)for(int j=0;j<=n;j++)d=rdn(),add(bh[i-1][j],bh[i][j],d);for(int i=0;i<=n;i++)for(int j=1;j<=n;j++)    d=rdn(),add(bh[i][j],bh[i][j-1],d);for(int i=1;i<=n;i++)for(int j=0;j<=n;j++)d=rdn(),add(bh[i][j],bh[i-1][j],d);int ans=0;while(bfs())memcpy(cur,hd,sizeof hd),ans+=dinic(0,INF);printf("%d\n",ans);return 0;
}
View Code

可以转成最短路。注意边的方向。

学习了学长的不显式建图的方法。大概 dis[ ][ ] 记录的就是从起点走到格子的距离,再记4个 dis[ ][ ] 表示它的周围4条边的容量,之类的。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=505,INF=2e6+5;
int n,dis[5][N][N],ans=INF;bool vis[N][N];
struct Node{int x,y,dis;Node(int a=0,int b=0,int d=0):x(a),y(b),dis(d) {}bool operator< (const Node &b)const{return dis>b.dis;}
};
priority_queue<Node> q;
int Mn(int a,int b){return a<b?a:b;}
int rdn()
{int ret=0;bool fx=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')fx=0;ch=getchar();}while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();return fx?ret:-ret;
}
void add(int x,int y,int d)
{if(d<dis[4][x][y])dis[4][x][y]=d,q.push(Node(x,y,d));
}
void dj()
{for(int i=1;i<=n;i++)add(1,i,dis[0][1][i]);for(int i=1;i<=n;i++)add(i,n,dis[1][i][n+1]);while(q.size()){int x=q.top().x,y=q.top().y,d=q.top().dis; q.pop();if(vis[x][y])continue; vis[x][y]=1;if(x<n)add(x+1,y,d+dis[0][x+1][y]);//x+1(up)if(y>1)add(x,y-1,d+dis[1][x][y]);if(x>1)add(x-1,y,d+dis[2][x-1][y]);//x-1(dn)if(y<n)add(x,y+1,d+dis[3][x][y]);}for(int i=1;i<=n;i++)ans=Mn(ans,dis[4][i][1]+dis[1][i][1]);for(int i=1;i<=n;i++)ans=Mn(ans,dis[4][n][i]+dis[0][n+1][i]);//n+1
}
int main()
{n=rdn();int d=n+1;for(int i=1;i<=d;i++)for(int j=1;j<=n;j++)dis[0][i][j]=rdn();//upfor(int i=1;i<=n;i++)for(int j=1;j<=d;j++)dis[1][i][j]=rdn();//leftfor(int i=0;i<=n;i++)//0~n & 1~n !!!for(int j=1;j<=n;j++)dis[2][i][j]=rdn();//dnfor(int i=1;i<=n;i++)for(int j=0;j<=n;j++)dis[3][i][j]=rdn();//rightmemset(dis[4],0x3f,sizeof dis[4]);dj();printf("%d\n",ans);return 0;
}
View Code

转载于:https://www.cnblogs.com/Narh/p/10165510.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《黑客攻防技术宝典Web实战篇@第2版》读书笔记1:了解Web应用程序

读书笔记第一部分对应原书的第一章&#xff0c;主要介绍了Web应用程序的发展&#xff0c;功能&#xff0c;安全状况。 Web应用程序的发展历程 早期的万维网仅由Web站点构成&#xff0c;只是包含静态文档的信息库&#xff0c;随后人们发明了Web浏览器用来检索和显示那些文档&am…

电脑入门完全自学手册_3DMAX零基础入门到精通的学习路线和教程

没有美术基础可以学建模吗&#xff1f;毋庸置疑&#xff0c;只要肯学都是可以的&#xff01;那么我们今天来说说零基础学习建模要着重注意什么。最高效最快速的入门学习方式&#xff1a;看知识兔视频课程&#xff0c;跟着知识兔老师操作&#xff0c;听知识兔老师讲解&#xff0…

Python-UiAutomator2实现Android自动化测试

本帖转自搜狗测试公众号 【一、前言】 基于Python-UiAutomator2实现Android自动化测试&#xff0c;小编在Android应用的自动化性能测试中进行了实践。本篇将简单介绍python中使用adb、aapt命令的方法以及Python-UiAutomator2使用&#xff0c;后续文章将对环境搭建以及自动化性能…

硬件信息修改大师_零成本学习之单片机硬件开发(1)

从今天开始给大家逐步讲解单片机编程&#xff0c;有兴趣的小伙伴们&#xff0c;可以关注本课程&#xff0c;完全免费本人从事从2004年大学毕业开始从事开发工作&#xff0c;先后做过单片机开发、ucOSII开发、手机开发、android APP开发、PHP开发、微信小程序开发&#xff0c;目…

ionic3 自动创建启动背景splash以及图标icon

在新建的项目文件夹下的 resources下就是我们放置图标以及启动背景图片的位置了。 如果现在我们想生成自己的图片的启动背景以及图片&#xff0c;我们需要把resources下的 icon.png 以及splash.png 替换为我们的图片。 icon 图片最好为1024x1024像素 splash 图片最好为2732x2…

Spring容器的简单实现(IOC原理)

引言&#xff1a;容器是什么&#xff1f;什么是容器&#xff1f;Spring容器又是啥东西&#xff1f;我给Spring容器一个对象名字&#xff0c;为啥能给我创建一个对象呢&#xff1f; 一、容器是装东西的&#xff0c;就像你家的水缸&#xff0c;你吃饭的碗等等。 java中能作为容器…

epic怎么添加本地游戏_游戏日报:原神公测无法上架多家安卓渠道;Epic投资布局游戏UGC平台...

// 热点标签/// NOCITCE华为|小米|OPPO|米哈游|腾讯|莉莉丝B站|阅文集团|Epic|万国觉醒|灰烬战线FGO|怪物弹珠|勇者斗恶龙|金币大师阴阳师|和平精英|王者荣耀|三国志战略版1.华为、小米、OPPO等多家安卓渠道的《原神》版主发布公告称&#xff0c;因开发者要求/未与米哈游达成一…

php 出错处理,PHP 错误处理机制

在日常的项目开发过程中&#xff0c;总是会出现一些我们意想不到的异常错误&#xff0c;如果我们对此没有进行相对完善的处理&#xff0c;那么程序看上去也很不专业&#xff0c;也很可能就会成为别人攻击系统的有效信息&#xff1b;有些错误异常会终止脚本执行&#xff0c;这个…

使用structure101分析软件包的依赖关系

稳定应用程序的一个关键是结构良好的代码库。 我们知道我们应该建立尽可能多的黑匣子&#xff0c;因为一旦完成一个黑匣子&#xff0c;我们就不必再考虑它的内部了。 您只需要使用您或其他团队成员通过明确定义的界面编写的代码即可。 这使您可以专注于要添加的下一个功能。 当…

excel高级筛选怎么用_神!Excel高级筛选原来如此好用

转自EXCE不加班这两天的宏教程都提到了高级筛选这个功能&#xff0c;不过只是用到最基本的用法。高级筛选其实是一个很好用的功能&#xff0c;今天卢子来全面讲解。1.按关键词筛选高级筛选最重要的就是条件区域&#xff0c;资产名称四门书柜&#xff0c;日期2017/1/1&#xff0…

iis7.5配置php环境,iis7.5安装配置php环境 - iis

前言iis7.5是安装在win7、win8里的web服务器&#xff0c;win2003、win2000的web服务器使用的是iis6.0&#xff0c;由于win7、win8系统相比win2003、win2000有了改新革面的不同&#xff0c;因此对于iis7.5的配置也必需捣鼓一翻才能熟悉。不过...前言iis7.5是安装在win7、win8里的…

微信小程序 网络请求之设置合法域名

设置域名 登录微信公众号后台小程序中 设置→开发设置→服务器设置 必须设置域名&#xff0c;微信小程序才能进行网络通讯&#xff0c;不然会报错 如果设置好了合法域名&#xff0c;开发工具还提示不在合法域名列表中&#xff0c;因为在微信会有一段时间的缓存&#xff0c;等…

money (dp)

牛客网暑假训练第二场D题&#xff1a; 链接&#xff1a;https://www.nowcoder.com/acm/contest/140/D来源&#xff1a;牛客网 题目描述 White Cloud has built n stores numbered from 1 to n. White Rabbit wants to visit these stores in the order from 1 to n. The store …

php gps 坐标,php 计算gps坐标 距离

在计算机或GPS上经纬度经常用度、分、秒和度.度、分.分、秒.秒的混合方式进行表示&#xff0c;度、分、秒间的进 制是60进制&#xff0c;度.度、分.分、秒.秒的进制是100进制&#xff0c;换算时一定要注意。可以近似地认为每个纬度之间的距离是不变的111KM,每分间 1.85KM&#…

博客园如何使用MarkDown

如何使用博客园下的markdown&#xff1a;https://www.cnblogs.com/ulrica/p/8933549.html 博客园的 MarkDown 代码样式如何设置https://www.cnblogs.com/zhongxia/p/26b4b061f2a47518681bcdd4ff89c344.html 博客园 Markdown 编辑器指南http://www.cnblogs.com/qiaogaojian/p/61…

jQuery -- 光阴似箭(五):AJAX 方法

jQuery -- 知识点回顾篇&#xff08;五&#xff09;&#xff1a;AJAX 方法 1. $.ajax 方法&#xff1a;用于执行 AJAX&#xff08;异步 HTTP&#xff09;请求。 <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"t…

ggplot2设置坐标轴范围_R语言数据可视化| ggplot2中会“分身术”的facet_wrap()与facet_grid()...

【R语言】高维数据可视化| ggplot2中会“分身术”的facet_wrap()与facet_grid()姐妹花​mp.weixin.qq.comfacet_grid()形成由行和列面化变量定义的面板矩阵。当有两个离散变量&#xff0c;并且这些变量的所有组合存在于数据中时&#xff0c;它是最有用的。如果只有一个具有多个…

php resque 计划任务,PHP-RESQUE - 实现重试

因为PHP-Resque 的重试部分需要自己写&#xff0c;网上又没啥轮子&#xff0c;而且resque也已经很久不更新了&#xff0c;所以自己研究下resque的源码&#xff0c;然后也借鉴了Laravel的队列重试机制&#xff0c;实现了PHP-Resque的重试机制。Resque地址设计思路1.这里需要阅读…

RabbitMQ集群、镜像部署配置

1 RABBITMQ简介及安装 RabbitMQ是一个开源的AMQP实现&#xff0c;服务器端用Erlang语言编写&#xff0c;支持多种客户端&#xff0c;如&#xff1a;Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等&#xff0c;支持AJAX。用于在分布式系统中存储转发消息…

C语言、c++实现超好玩植物大战僵尸(完整版附源码)

实现这个游戏需要Easy_X main.cpp //开发日志 //1导入素材 //2实现最开始的游戏场景 //3实现游戏顶部的工具栏 //4实现工具栏里面的游戏卡牌 #define WIN_WIDTH 900 #define WIN_HEIGHT 600 //定义植物类型 enum { WAN_DOU, XIANG_RI_KUI, ZHI_WU_COUNT }; #include<stdio.…