题面太长啦,请诸位自行品尝—>海拔

分析:

  这是我见过算法比较明显的最小割题目了,很明显对于某一条简单路径,海拔只会有一次变换。

  而且我们要最终使变换海拔的边权值和最小。

  我们发现变换海拔相当于将图割开,左上右下两个点分别属于两个不同的集合,那这就是一个很形象的最小割模型。

  我们只需要平面图转转对偶图,将图中每个面变成点,连边跑最短路即可。

转换的细节可能有些麻烦,大家慢慢理解。

代码:

 #include<bits/stdc++.h>
#define pi pair<int,int>
#define mp(a,b) make_pair(a,b)
#define ms(a,x) memset(a,x,sizeof(a))
using namespace std;
const int N=;int S,T,ans;
struct node{int y,z,nxt;}e[N*];
priority_queue<pi>q;int h[N],c=;
int d[N],vis[N],n,m,nm[][];
void add(int x,int y,int z){
e[++c]=(node){y,z,h[x]};h[x]=c;
} int main(){
scanf("%d",&n);S=;T=n*n+;
for(int i=;i<=n;i++)
nm[][i]=nm[i][n+]=S,
nm[i][]=nm[n+][i]=T;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
nm[i][j]=n*(i-)+j;
for(int i=;i<=n;i++)
for(int j=,x;j<=n;j++)
scanf("%d",&x),add(nm[i][j],nm[i+][j],x);
for(int i=;i<=n;i++)
for(int j=,x;j<=n;j++)
scanf("%d",&x),add(nm[i][j+],nm[i][j],x);
for(int i=;i<=n;i++)
for(int j=,x;j<=n;j++)
scanf("%d",&x),add(nm[i+][j],nm[i][j],x);
for(int i=;i<=n;i++)
for(int j=,x;j<=n;j++)
scanf("%d",&x),add(nm[i][j],nm[i][j+],x);
ms(d,0x3f);d[S]=;q.push(mp(,S));
while(!q.empty()){
int x=q.top().second;q.pop();
if(vis[x]) continue;vis[x]=;
for(int i=h[x],y;i;i=e[i].nxt)
if(d[y=e[i].y]>d[x]+e[i].z)
d[y]=d[x]+e[i].z,q.push(mp(-d[y],y));
} printf("%d\n",d[T]);return ;
}

对偶图转换+最小割

BZOJ2007 NOI2010 海拔 平面图转对偶图 最小割的更多相关文章

  1. [NOI2010]海拔 平面图转对偶图 最小割

    题解: 首先,我们不难猜到高度只有 $0$ 或 $1$ 两种可能,而且高度为 0 的地区组成一个联通块,高度为 1 的地区组成一个联通块.只有这样,人们所耗费的体力才是最小的.得出这个结论,题目就成了 ...

  2. P2046 [NOI2010]海拔 平面图转对偶图(最小割-》最短路)

    $ \color{#0066ff}{ 题目描述 }$ YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看作一个正方形. ...

  3. BZOJ1001 狼抓兔子 平面图转对偶图 最小割

    现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点为 ...

  4. [jzoj 6092] [GDOI2019模拟2019.3.30] 附耳而至 解题报告 (平面图转对偶图+最小割)

    题目链接: https://jzoj.net/senior/#main/show/6092 题目: 知识点--平面图转对偶图 在求最小割的时候,我们可以把平面图转为对偶图,用最短路来求最小割,这样会比 ...

  5. bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路)

    bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路) 题目描述: bzoj  luogu 题解时间: 首先考虑海拔待定点的$h$都应该是多少 很明显它们都是$0$或$1$,并且所 ...

  6. BZOJ2007 [Noi2010]海拔 【平面图最小割转对偶图最短路】

    题目链接 BZOJ2007 题解 这是裸题啊,,要是考试真的遇到就好了 明显是最小割,而且是有来回两个方向 那么原图所有向右的边转为对偶图向下的边 向左的边转为向上 向下转为向左 向上转为向右 然后跑 ...

  7. Vijos1734 NOI2010 海拔 平面图最小割

    建立平面图的对偶图,把最小割转化成最短路问题 Dijkstra算法堆优化 (被输入顺序搞WA了好几次T_T) #include <cstdio> #include <cstring& ...

  8. Luogu2046 NOI2010 海拔 平面图、最小割、最短路

    传送门 首先一个不知道怎么证的结论:任意点的\(H\)只会是\(0\)或\(1\) 那么可以发现原题的本质就是一个最小割,左上角为\(S\),右下角为\(T\),被割开的两个部分就是\(H=0\)与\ ...

  9. [BZOJ2007][NOI2010]海拔(对偶图最短路)

    首先确定所有点的海拔非0即1,问题转化成裸的平面图最小割问题,进而转化成对偶图最短路(同BZOJ1002). 这题的边是有向的,所以所有边顺时针旋转90度即可. 如下图(S和T的位置是反的). #in ...

随机推荐

  1. HDU1244:Max Sum Plus Plus Plus

    题目链接:Max Sum Plus Plus Plus 题意:在n个数中取m段数使得这m段数之和最大,段与段之间不能重叠 分析:见代码 //dp[i][j]表示前i个数取了j段的最大值 //状态转移: ...

  2. 关于kindle无法连接上wifi的问题

    家里换了宽带以后我发现kindle无法链接上WiFi了. 原因可能是我家使用的WiFi网络是1-11之间的信道,也有可能是运营商的问题(由于我是软件开发,对硬件和网络并不是很清楚,只能大概估计一下). ...

  3. 标准字符cp功能

    #include<stdio.h> #include<fcntl.h> int main(int argc,char *argv[]) { FILE *src_fp,*des_ ...

  4. hasLayout原理【转】

    项目中经常用到:*html .clearfix{ height:1%;}  //IE6能识别*+html .clearfix{height:1%;} //IE7能识别1,有很多方式能触发hasLayo ...

  5. django中实现websocket

    一.Websockets介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信 ...

  6. AJPFX关于增强for的概述和使用(foreach)

    增强for的概述和使用(foreach)1.增强for的概述和使用(foreach)                格式:                for(数组或者Collection集合中元素 ...

  7. logging模块基础3

    1.logging模块的日志级别 CRITICAL = 50 #FATAL = CRITICAL ERROR = 40 WARNING = 30 #WARN = WARNING INFO = 20 D ...

  8. openmv第一次调试

    2018-09-19  20:14:51 import sensor, image, time import car import json import time from pyb import U ...

  9. yii在Windows下安装(通过composer方式)

    Composer 安装: (Composer 不是一个包管理器,它仅仅是一个依赖管理工具.它涉及 "packages" 和 "libraries",但它在每个项 ...

  10. 镜像中的 Everything, GnomeLive ,KdeLive ,livecd ,NetInstall的区别?

    everything: 对完整版安装盘的软件进行补充,集成所有软件 GnomeLive , GNOME桌面版 KdeLive , KDE桌面版 livecd 光盘上运行的系统 ,NetInstall ...