https://www.lydsy.com/JudgeOnline/problem.php?id=1001

很明显的求对偶图的最短路即可(由于特判写错了一直wa = = )

//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
#define cd complex<double>
#define ull unsigned long long
#define base 1000000000000000000
#define fio ios::sync_with_stdio(false);cin.tie(0) using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f; struct edge{
int to,Next;ll c;
}e[maxn];
int head[N],cnt;
void init()
{
cnt=;
memset(head,-,sizeof head);
}
void add(int u,int v,ll c)
{
// printf("%d %d %lld\n",u,v,c);
e[cnt].to=v;
e[cnt].c=c;
e[cnt].Next=head[u];
head[u]=cnt++;
}
priority_queue<pli,vector<pli>,greater<pli> >q;
ll dis[N];
void dij(int s)
{
for(int i=;i<N;i++)dis[i]=1e18;
dis[s]=;
q.push(mp(,s));
while(!q.empty())
{
pil u = q.top();q.pop();
int x=u.se;
if(dis[x]<u.fi)continue;
for(int i=head[x];~i;i=e[i].Next)
{
int To=e[i].to;
if(dis[To]>dis[x]+e[i].c)
{
dis[To]=dis[x]+e[i].c;
q.push(mp(dis[To],To));
}
}
}
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int s=(n-)*(m-)*,t=(n-)*(m-)*+;
if(n<=&&m<=)return *puts("");
else if(n==||m==)
{
ll ans=1e18;
for(int i=;i<=(n==?m-:n-);i++)
{
ll x;scanf("%lld",&x);
ans=min(ans,x);
}
printf("%lld\n",ans);
return ;
}
init();
for(int i=;i<=n;i++)
{
for(int j=;j<=m-;j++)
{
ll x;scanf("%lld",&x);
if(i==)
{
add(s,*((i-)*(m-)+j-),x);
add(*((i-)*(m-)+j-),s,x);
}
else if(i==n)
{
add(t,*((i-)*(m-)+j-)+,x);
add(*((i-)*(m-)+j-)+,t,x);
}
else
{
add(*((i-)*(m-)+j-)+,*((i-)*(m-)+j-),x);
add(*((i-)*(m-)+j-),*((i-)*(m-)+j-)+,x);
}
}
}
for(int i=;i<=n-;i++)
{
for(int j=;j<=m;j++)
{
ll x;scanf("%lld",&x);
if(j==)
{
add(t,*((i-)*(m-))+,x);
add(*((i-)*(m-))+,t,x);
}
else if(j==m)
{
add(s,*((i-)*(m-)+m-),x);
add(*((i-)*(m-)+m-),s,x);
}
else
{
add(*((i-)*(m-)+j-),*((i-)*(m-)+j-)+,x);
add(*((i-)*(m-)+j-)+,*((i-)*(m-)+j-),x);
}
}
}
for(int i=;i<=n-;i++)
{
for(int j=;j<=m-;j++)
{
ll x;scanf("%lld",&x);
ll now=(i-)*(m-)+j-;
add(*now,*now+,x);
add(*now+,*now,x);
}
}
dij(s);
printf("%lld\n",dis[t]);
return ;
}
/******************** ********************/

bzoj1001平面图最小割转对偶图最短路的更多相关文章

  1. BZOJ1001/LG4001 「ICPC Beijing2006」狼抓兔子 平面图最小割转对偶图最短路

    问题描述 BZOJ1001 LG4001 题解 平面图最小割=对偶图最短路 假设起点和终点间有和其他边都不相交的一条虚边. 如图,平面图的若干条边将一个平面划分为若干个图形,每个图形就是对偶图中的一个 ...

  2. [BZOJ 2007] [Noi2010] 海拔 【平面图最小割(对偶图最短路)】

    题目链接:BZOJ - 2007 题目分析 首先,左上角的高度是 0 ,右下角的高度是 1.那么所有点的高度一定要在 0 与 1 之间.然而选取 [0, 1] 的任何一个实数,都可以用整数 0 或 1 ...

  3. BZOJ 2007 海拔(平面图最小割转对偶图最短路)

    首先注意到,把一个点的海拔定为>1的数是毫无意义的.实际上,可以转化为把这些点的海拔要么定为0,要么定为1. 其次,如果一个点周围的点的海拔没有和它相同的,那么这个点的海拔也是可以优化的,即把这 ...

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

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

  5. BZOJ2007/LG2046 「NOI2010」海拔 平面图最小割转对偶图最短路

    问题描述 BZOJ2007 LG2046 题解 发现左上角海拔为 \(0\) ,右上角海拔为 \(1\) . 上坡要付出代价,下坡没有收益,所以有坡度的路越少越好. 所以海拔为 \(1\) 的点,和海 ...

  6. bzoj1001/luogu4001 狼抓兔子 (最小割/平面图最小割转对偶图最短路)

    平面图转对偶图:先在原图中加一个s->t的边,然后对每个面建一个点,对每条分隔两个面的边加一条连接这两个面对应点的边,边权等于原边权. 然后从刚才加的s->t分割出来的两面对应的两个点跑最 ...

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

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

  8. 【Bzoj】1001狼抓兔子(平面图最小割转对偶图最短路)

    YEAH 题目链接 终于做对这道题啦    建图的艰辛难以言表- - 顺便说一句我队列转STL啦 狼抓兔子的地图符合平面图定义,于是将该图转成对偶图并求出对偶图的最短路即可. 这篇博客给了我极大的帮助 ...

  9. B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij

    B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij 题意:城市被东西向和南北向的主干道划分为n×n个区域.城市中包括(n+1)×(n+1)个交叉路口和2n×(n+1)条双向 ...

随机推荐

  1. pytorch rnn

    温习一下,写着玩. import torch import torch.nn as nn import numpy as np import torch.optim as optim class RN ...

  2. Linux系统——文件系统与LVM 逻辑

    格式化命令 mkfs. mkswap mkfs格式化数据磁盘 # mkfs -t ext4 /dev/sdb1 # mkfs.ext4 /dev/sdb1 -t 指定格式化文件类型 -b 指定bloc ...

  3. windows 下安装 rabbitmq报init terminating in do_boot错误

    好长时间没有写东西了,记一个安装笔记吧. 目前市面上比较常用的几个消息中间件,rabbitmq算是风评比较好的,所以就拿来安装一下玩玩喽(很有可能也仅限于是安装一下....)安装过程不表,无非是下载E ...

  4. 一步一步学EF系列【5、升级篇 实体与数据库的映射】live writer真坑,第4次补发

    前言 之前的几篇文章,被推荐到首页后,又被博客园下了,原因内容太少,那我要写多点呢,还是就按照这种频率进行写呢?本身我的意图这个系列就是想已最简单最容易理解的方式进行,每篇内容也不要太多,这样初学者容 ...

  5. 从硬件到语言,详解C++的内存对齐(memory alignment)

    转载请保留以下声明 作者:赵宗晟 出处:https://www.cnblogs.com/zhao-zongsheng/p/9099603.html 很多写C/C++的人都知道“内存对齐”的概念以及规则 ...

  6. mybatis架构理解

    1. mybatis配置 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息. mapper.xml文件即sql映射文件,文件中配置了操作数 ...

  7. appium不同姿势安装

    一 桌面版(打开很慢,常用于辅助元素定位) 1.官网下载window版本: 2.直接点击图标即可打开  

  8. 【二分+SPFA】修建道路(road)

    (四五年以前的老草稿,作为强迫症还是发布出来吧) 修建道路(road.pas/c/cpp) [问题描述] NOIP2012的参赛者LG异想天开打算修建一条磁悬浮列车的通道连接现代OI王国的首都(编号为 ...

  9. springCloud3---ribbon

    同一份代码,改变端口,就可以启动多个同名但是端口不一样的微服务. 客户端通过nginx来调用后面的多个用户微服务来实现负载均衡,这是服务端负载均衡. 客户端有一个组件,可以知道当前有几个用户微服务的i ...

  10. F1Book报表在Win7下运行出现显示不完整问题

    Q: Win7环境下,明明报表要显示20多行,可是显示18行,即显示不完全情况(或常常出现报表底部内容不见了,fe:最后的签名或备注消失了)?? A:只要更新Vcf132.ocx即可.       操 ...