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,一经查实,立即删除!

相关文章

php 四维数组_PHP 多维数组

PHP - 两维数组两维数组是数组的数组(三维数组是数组的数组的数组)。首先&#xff0c;让我们看看下面的表格&#xff1a;品牌库存销量Volvo3320BMW1715Saab52Land Rover1511我们能够在两维数组中存储上表中的数据&#xff0c;就像这样&#xff1a;$cars array(array("Vol…

Vue于React特性对比(二)

一&#xff0c;关于响应式数据更新方式的实现 1&#xff09;只有在data里面定义的数据才会有响应式更新 vue依赖的defineProperty的数据劫持加上依赖数据&#xff0c;实现数据的响应式更新。可以称之为依赖式的响应。因为依赖所以注定了只会更新与data相关的数据。 2&#xff0…

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

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

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

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

使用Java RMI时要记住的两件事

这是一篇简短的博客文章&#xff0c;介绍使用Java RMI时应注意的两个常见陷阱。 设置java.rmi.server.hostname 如果您感到陌生&#xff0c;Connection拒绝托管&#xff1a; RMI客户端上的错误消息&#xff0c;并且您确定连接应该正常工作&#xff08;您仔细检查了所有标准配置…

Python-UiAutomator2实现Android自动化测试

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

阅读笔记:ImageNet Classification with Deep Convolutional Neural Networks

概要&#xff1a; 本文中的Alexnet神经网络在LSVRC-2010图像分类比赛中得到了第一名和第五名&#xff0c;将120万高分辨率的图像分到1000不同的类别中&#xff0c;分类结果比以往的神经网络的分类都要好。为了训练更快&#xff0c;使用了非饱和神经元并对卷积操作进行双GPU实现…

vsCode 设置vue 保存自动格式化代码

setting {// vscode默认启用了根据文件类型自动设置tabsize的选项"editor.detectIndentation": false,// 重新设定tabsize"editor.tabSize": 2,// #每次保存的时候自动格式化"editor.formatOnSave": true,// #每次保存的时候将代码按eslint格式进…

您是否敢更改HashMap实现?

如今&#xff0c;有大胆的工程师在为Oracle工作。 昨天尝试确定Heisenbug时&#xff0c;我得出了这个结论。 不足为奇&#xff0c;当我尝试找到解决方案时&#xff0c;该错误似乎消失了。 几个小时后&#xff0c;将问题归结为JDK7更新之间的细微差别&#xff0c;该错误的“ Hei…

php 函数变量的顺序,PHP实现参数的自定义顺序调用 | 剑花烟雨江南

首先我们以添加用户为例来看两个方法&#xff1a;//方法①public function addUser(string $userName, string $userPassword, string $telephone, string $userEmail ){}//方法②public function addUser(array $data){}方法①的优点&#xff1a; 通过方法的定义&#xff0c;…

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

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

RotateDrawable

用来对Drawable进行旋转,也是通过setLevel来控制旋转的,最大值也是:10000 相关属性如下&#xff1a; fromDegrees:起始的角度,,对应最低的level值,默认为0toDegrees:结束角度,对应最高的level值,默认360pivotX:设置参照点的x坐标,取值为0~1,默认是50%,即0.5pivotY:设置参照点的…

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中能作为容器…

Java:安排作业按时间间隔运行

最近&#xff0c;我花了一些时间围绕Neo4j版本之间的滚动升级构建了一组测试&#xff0c;作为其中的一部分&#xff0c;我想记录升级发生时的群集状态。 测试的主线程会等待升级完成&#xff0c;因此我想每隔几秒钟登录另一个线程。 Alistair向我指出了ScheduledExecutorServi…

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

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

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

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

根据location地址,在导航栏高亮显示当前页面

获取当前页面的地址栏。与导航栏中所有<a> 标签的href属性 进行比较。如果相等则高亮显示 此<a>标签。 注意点&#xff1a;a 标签的href 属性在浏览器解析时 是绝对路径。 a 标签的href 如果是锚点&#xff0c;则 pathname &#xff0c; href都与 location的 pathn…

解决关于 ionic3 启动白屏 控制台错误提示:Uncaught SyntaxError Use of const in strict mode.

今天将项目从ionic2 升级为ionic3 &#xff0c;ionic serve 运行在网页上无任何错误。 但是将项目打包成为android apk 却一直卡在启动页面 白屏&#xff0c;进不去的情况。后来在android studio 控制台看到这个错误提示&#xff1a;Uncaught SyntaxError Use of const in str…

参数与超参数

作为机器学习攻城狮&#xff08;咳咳&#xff1a;调参员&#xff09;&#xff0c;参数和超参数是最最基础的常识。 1、参数&#xff08;模型根据数据可以自动学习出的变量&#xff09; 参数指的是模型内部的配置变量(configuration variable)&#xff0c;可通过数据来估计其取值…