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)条双向 ...
随机推荐
- Linux下多个.c文件的编译和Makefile文件
在编程的时候,我们可以把一个完整程序的每个函数分离出来,写成.c文件,最后再一起编译和链接.这样有利于程序功能模块化,也方便检查代码错误. .h文件:里面编辑该程序需要引用的头文件. #ifndef ...
- DB_FILE_MULTIBLOCK_READ_COUNT对物理读和IO次数的影响
当执行SELECT语句时,如果在内存里找不到相应的数据,就会从磁盘读取进而缓存至LRU末端(冷端),这个过程就叫物理读.当相应数据已在内存,就会逻辑读. 物理读是磁盘读,逻辑读是内存读:内存读的速度远 ...
- PHPCMS新闻内容调用方法介绍
{template "content","header"} ---------- 调用根目录下phpcms\template\content\header文件 ...
- Http协议面试题
1.说一下什么是Http协议? 对器客户端和 服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”. 2.什么是Http协议无状态协议?怎么解决Http协议无状态协议?(曾经去某创业公司问到) ...
- deeplenrnig学习笔记——什么是特征
特征是机器学习系统的原材料,对最终模型的影响是毋庸置疑的.如果数据被很好的表达成了特征,通常线性模型就能达到满意的精度. 一.特征的表示粒度: 学习算法在一个什么粒度上的特征表示,才有能发挥作用 ...
- 【python】win10中python3.5.2输入pip出现Fatal error in launcher: Unable to create process using '"'
系统:windows 10 python版本:3.5.2 出现的错误如下: C:\Users\zhuxy>pip list Fatal error in launcher: Unable to ...
- 【HTML5校企公益课】第一天
1.搭建基本的开发环境.学校电脑用的是浏览器是Chrome,编辑器是HBuilder. 2.初步介绍HTML5的Web项目基本结构. css:样式表 img:存放图片 js:存放脚本文件 .html: ...
- 在父页面和其iframe之间函数回调 父页面回调iframe里写的函数
// @shaoyang 父页面 window['mengBanLogin']={ mengBanArr : new Array(), mengBanLoginSuccess : function( ...
- 【vim】几种模式的切换
很多初学者启动vim后,不知道怎么输入字符:按了半天字母,结果屏幕还是空的. vim和记事本或WORD不一样,不是一打开后就可以输入文字,此时它处于正常模式. vim一共有4个模式: 正常模式 (No ...
- Vim 基本設置 – 使用Vim-plug管理插件 (3)【转】
本文转载自:https://staryoru.github.io/vim-plugin-manager/ Vim中有很多非常好用的插件(plugin),對於這些插件的安裝.更新與移除等等,使用一個插件 ...