BZOJ2007/LG2046 「NOI2010」海拔 平面图最小割转对偶图最短路
问题描述
题解
发现左上角海拔为 \(0\) ,右上角海拔为 \(1\) 。
上坡要付出代价,下坡没有收益,所以有坡度的路越少越好。
所以海拔为 \(1\) 的点,和海拔为 \(0\) 的点,一定能够在这个网格图中由一条连续的线划分为两个集合。
将一个图中的所有结点划分为两个集合,显然为最小割模型。
又发现是网格图,所以平面图最小割转化为对偶图最短路。
\(\mathrm{Code}\)
不删调试见祖宗
#include<bits/stdc++.h>
using namespace std;
const int maxn=500*500+3;
int n,S,T;
int Head[maxn],to[maxn*5],Next[maxn*5],w[maxn*5],tot=1;
int fr[maxn*5];
void add(int x,int y,int z){
fr[++tot]=y,to[tot]=x,Next[tot]=Head[y],Head[y]=tot,w[tot]=z;
}
int id(int x,int y){
return (x-1)*n+y;
}
void Init(void){
scanf("%d",&n);
}
void WestToEast(void){
for(int i=1,x;i<=n;i++){
scanf("%d",&x);
add(id(1,i),S,x);
}
for(int i=2;i<=n;i++){
for(int j=1,x;j<=n;j++){
scanf("%d",&x);
add(id(i,j),id(i-1,j),x);
}
}
for(int i=1,x;i<=n;i++){
scanf("%d",&x);
add(T,id(n,i),x);
}
}
void NorthToSouth(void){
for(int i=1,x;i<=n;i++){
scanf("%d",&x);
add(T,id(i,1),x);
for(int j=2;j<=n;j++){
scanf("%d",&x);
add(id(i,j-1),id(i,j),x);
}
scanf("%d",&x);
add(id(i,n),S,x);
}
}
void EastToWest(void){
for(int i=1,x;i<=n;i++){
scanf("%d",&x);
add(S,id(1,i),x);
}
for(int i=2;i<=n;i++){
for(int j=1,x;j<=n;j++){
scanf("%d",&x);
add(id(i-1,j),id(i,j),x);
}
}
for(int i=1,x;i<=n;i++){
scanf("%d",&x);
add(id(n,i),T,x);
}
}
//n lines
//n+1 every-line
void SouthToNorth(void){
for(int i=1,x;i<=n;i++){
scanf("%d",&x);
add(id(i,1),T,x);
for(int j=2;j<=n;j++){
scanf("%d",&x);
add(id(i,j),id(i,j-1),x);
}
scanf("%d",&x);
add(S,id(i,n),x);
}
}
void debug(){
printf("\n### S = %d\n",S);
printf("### T = %d\n\n",T);
for(int i=2;i<=tot;i++){
printf("*** From %d To %d , val = %d\n",fr[i],to[i],w[i]);
}
}
void Graph_build(void){
S=n*n+1,T=S+1;
WestToEast();
NorthToSouth();
EastToWest();
SouthToNorth();
}
int dis[maxn];
bool vis[maxn];
#define pii(x,y) make_pair(x,y)
void dijkstra(void){
memset(dis,0x3f,sizeof(dis));
priority_queue<pair<int,int> >q;
q.push(pii(0,S));dis[S]=0;
while(!q.empty()){
int x=q.top().second;q.pop();
if(vis[x]) continue;vis[x]=1;
if(x==T) return;
for(int i=Head[x];i;i=Next[i]){
int y=to[i];
if(dis[y]>dis[x]+w[i]){
dis[y]=dis[x]+w[i];
q.push(pii(-dis[y],y));
}
}
}
}
void Work(void){
Graph_build();
#ifndef ONLINE_JUDGE
// debug();
#endif
dijkstra();
printf("%d\n",dis[T]);
}
int main(){
#ifndef ONLINE_JUDEG
// freopen("hzlbn.in","r",stdin);
#endif
Init();
Work();
return 0;
}
BZOJ2007/LG2046 「NOI2010」海拔 平面图最小割转对偶图最短路的更多相关文章
- bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路)
bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路) 题目描述: bzoj luogu 题解时间: 首先考虑海拔待定点的$h$都应该是多少 很明显它们都是$0$或$1$,并且所 ...
- BZOJ 2007 海拔(平面图最小割转对偶图最短路)
首先注意到,把一个点的海拔定为>1的数是毫无意义的.实际上,可以转化为把这些点的海拔要么定为0,要么定为1. 其次,如果一个点周围的点的海拔没有和它相同的,那么这个点的海拔也是可以优化的,即把这 ...
- 【BZOJ2007】【NOI2010】海拔(最小割,平面图转对偶图,最短路)
[BZOJ2007][NOI2010]海拔(最小割,平面图转对偶图,最短路) 题面 BZOJ 洛谷 Description YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域. ...
- [BZOJ 2007] [Noi2010] 海拔 【平面图最小割(对偶图最短路)】
题目链接:BZOJ - 2007 题目分析 首先,左上角的高度是 0 ,右下角的高度是 1.那么所有点的高度一定要在 0 与 1 之间.然而选取 [0, 1] 的任何一个实数,都可以用整数 0 或 1 ...
- BZOJ1001/LG4001 「ICPC Beijing2006」狼抓兔子 平面图最小割转对偶图最短路
问题描述 BZOJ1001 LG4001 题解 平面图最小割=对偶图最短路 假设起点和终点间有和其他边都不相交的一条虚边. 如图,平面图的若干条边将一个平面划分为若干个图形,每个图形就是对偶图中的一个 ...
- BZOJ2007 [Noi2010]海拔 【平面图最小割转对偶图最短路】
题目链接 BZOJ2007 题解 这是裸题啊,,要是考试真的遇到就好了 明显是最小割,而且是有来回两个方向 那么原图所有向右的边转为对偶图向下的边 向左的边转为向上 向下转为向左 向上转为向右 然后跑 ...
- bzoj1001/luogu4001 狼抓兔子 (最小割/平面图最小割转对偶图最短路)
平面图转对偶图:先在原图中加一个s->t的边,然后对每个面建一个点,对每条分隔两个面的边加一条连接这两个面对应点的边,边权等于原边权. 然后从刚才加的s->t分割出来的两面对应的两个点跑最 ...
- 【Bzoj】1001狼抓兔子(平面图最小割转对偶图最短路)
YEAH 题目链接 终于做对这道题啦 建图的艰辛难以言表- - 顺便说一句我队列转STL啦 狼抓兔子的地图符合平面图定义,于是将该图转成对偶图并求出对偶图的最短路即可. 这篇博客给了我极大的帮助 ...
- bzoj1001平面图最小割转对偶图最短路
https://www.lydsy.com/JudgeOnline/problem.php?id=1001 很明显的求对偶图的最短路即可(由于特判写错了一直wa = = ) //#pragma com ...
随机推荐
- win10搭建Python3环境
到2019年初,Python3已经更新到了Python3.7.3,Python有两个大版本Python2和Python3,Python3是现在和未来的主流. 本文介绍Python3.7 ...
- angular cli http请求封装+拦截器配置+ 接口配置文件
内容:接口配置文件.http请求封装 .拦截器验证登录 1.接口配置文件 app.api.ts import { Component, OnInit } from '@angular/core'; / ...
- js效果 整理
整理中... 1.js获取页面及元素高度.宽度 其他参考文献:http://www.open-open.com/lib/view/open1420120422531.html js: 网页可见区域宽: ...
- Thymeleaf 之 内置对象、定义变量、URL参数及标签自定义属性
Thymeleaf 之 内置对象.定义变量.URL参数及标签自定义属性 本文章来自[知识林] 如标题所述,这篇文章主要讲述Thymeleaf中的内置对象(list解析.日期格式化.数字格式化等).定义 ...
- sql server一些快捷方式和操作技巧
1.注释(ctrl+k+c) 和 取消注释(ctrl+k+u) 2.行号显示,如图:
- IDEA 工具自动生成JavaBean类
1.先安装GsonFormat插件:File-->Setting-->Plugins-->GsonFormat-->OK 2.new 一个新的Class空文件,然后 Alt+I ...
- 第05组 Beta版本演示
第05组 Beta版本演示 小组信息 组名:天码行空 组长博客:地址 组内成员: 组员 学号 卢欢(组长) 031702513 陈天恒 031702527 古力亚尔·艾山 031702511 张聪 0 ...
- C#关于MySQL中文乱码问题
本人在写一个测试demo的时候,遇到一个问题就是添加的中文数据在数据库定义的明明是varchar类型,但是显示出来还是乱码,不过还是自己粗心导致的问题. 以下三种方式可以自查一下: 1. 首先检查 ...
- Idea2019激活码
此教程仅用作个人学习,请勿用于商业获利,造成后果自负!!! 此教程已支持最新2019.2版本 此教程实时更新,请放心使用:如果有新版本出现猪哥都会第一时间尝试激活: idea官网下载地址:http:/ ...
- 【带着canvas去流浪(9)】粒子动画
目录 一. 粒子特效 二. 开发中遇到的问题 2.1 卡顿 2.2 轨迹 2.3 复位 2.4 防护层 2.5 二维向量类 三. 实现讲解 3.1 粒子类的update方法 3.2 粒子群的绘制 3. ...