bzoj1001平面图最小割转对偶图最短路
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平面图最小割转对偶图最短路的更多相关文章
- BZOJ1001/LG4001 「ICPC Beijing2006」狼抓兔子 平面图最小割转对偶图最短路
问题描述 BZOJ1001 LG4001 题解 平面图最小割=对偶图最短路 假设起点和终点间有和其他边都不相交的一条虚边. 如图,平面图的若干条边将一个平面划分为若干个图形,每个图形就是对偶图中的一个 ...
- [BZOJ 2007] [Noi2010] 海拔 【平面图最小割(对偶图最短路)】
题目链接:BZOJ - 2007 题目分析 首先,左上角的高度是 0 ,右下角的高度是 1.那么所有点的高度一定要在 0 与 1 之间.然而选取 [0, 1] 的任何一个实数,都可以用整数 0 或 1 ...
- BZOJ 2007 海拔(平面图最小割转对偶图最短路)
首先注意到,把一个点的海拔定为>1的数是毫无意义的.实际上,可以转化为把这些点的海拔要么定为0,要么定为1. 其次,如果一个点周围的点的海拔没有和它相同的,那么这个点的海拔也是可以优化的,即把这 ...
- bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路)
bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路) 题目描述: bzoj luogu 题解时间: 首先考虑海拔待定点的$h$都应该是多少 很明显它们都是$0$或$1$,并且所 ...
- BZOJ2007/LG2046 「NOI2010」海拔 平面图最小割转对偶图最短路
问题描述 BZOJ2007 LG2046 题解 发现左上角海拔为 \(0\) ,右上角海拔为 \(1\) . 上坡要付出代价,下坡没有收益,所以有坡度的路越少越好. 所以海拔为 \(1\) 的点,和海 ...
- bzoj1001/luogu4001 狼抓兔子 (最小割/平面图最小割转对偶图最短路)
平面图转对偶图:先在原图中加一个s->t的边,然后对每个面建一个点,对每条分隔两个面的边加一条连接这两个面对应点的边,边权等于原边权. 然后从刚才加的s->t分割出来的两面对应的两个点跑最 ...
- BZOJ2007 [Noi2010]海拔 【平面图最小割转对偶图最短路】
题目链接 BZOJ2007 题解 这是裸题啊,,要是考试真的遇到就好了 明显是最小割,而且是有来回两个方向 那么原图所有向右的边转为对偶图向下的边 向左的边转为向上 向下转为向左 向上转为向右 然后跑 ...
- 【Bzoj】1001狼抓兔子(平面图最小割转对偶图最短路)
YEAH 题目链接 终于做对这道题啦 建图的艰辛难以言表- - 顺便说一句我队列转STL啦 狼抓兔子的地图符合平面图定义,于是将该图转成对偶图并求出对偶图的最短路即可. 这篇博客给了我极大的帮助 ...
- B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij
B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij 题意:城市被东西向和南北向的主干道划分为n×n个区域.城市中包括(n+1)×(n+1)个交叉路口和2n×(n+1)条双向 ...
随机推荐
- pytorch rnn
温习一下,写着玩. import torch import torch.nn as nn import numpy as np import torch.optim as optim class RN ...
- Linux系统——文件系统与LVM 逻辑
格式化命令 mkfs. mkswap mkfs格式化数据磁盘 # mkfs -t ext4 /dev/sdb1 # mkfs.ext4 /dev/sdb1 -t 指定格式化文件类型 -b 指定bloc ...
- windows 下安装 rabbitmq报init terminating in do_boot错误
好长时间没有写东西了,记一个安装笔记吧. 目前市面上比较常用的几个消息中间件,rabbitmq算是风评比较好的,所以就拿来安装一下玩玩喽(很有可能也仅限于是安装一下....)安装过程不表,无非是下载E ...
- 一步一步学EF系列【5、升级篇 实体与数据库的映射】live writer真坑,第4次补发
前言 之前的几篇文章,被推荐到首页后,又被博客园下了,原因内容太少,那我要写多点呢,还是就按照这种频率进行写呢?本身我的意图这个系列就是想已最简单最容易理解的方式进行,每篇内容也不要太多,这样初学者容 ...
- 从硬件到语言,详解C++的内存对齐(memory alignment)
转载请保留以下声明 作者:赵宗晟 出处:https://www.cnblogs.com/zhao-zongsheng/p/9099603.html 很多写C/C++的人都知道“内存对齐”的概念以及规则 ...
- mybatis架构理解
1. mybatis配置 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息. mapper.xml文件即sql映射文件,文件中配置了操作数 ...
- appium不同姿势安装
一 桌面版(打开很慢,常用于辅助元素定位) 1.官网下载window版本: 2.直接点击图标即可打开
- 【二分+SPFA】修建道路(road)
(四五年以前的老草稿,作为强迫症还是发布出来吧) 修建道路(road.pas/c/cpp) [问题描述] NOIP2012的参赛者LG异想天开打算修建一条磁悬浮列车的通道连接现代OI王国的首都(编号为 ...
- springCloud3---ribbon
同一份代码,改变端口,就可以启动多个同名但是端口不一样的微服务. 客户端通过nginx来调用后面的多个用户微服务来实现负载均衡,这是服务端负载均衡. 客户端有一个组件,可以知道当前有几个用户微服务的i ...
- F1Book报表在Win7下运行出现显示不完整问题
Q: Win7环境下,明明报表要显示20多行,可是显示18行,即显示不完全情况(或常常出现报表底部内容不见了,fe:最后的签名或备注消失了)?? A:只要更新Vcf132.ocx即可. 操 ...