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

题目描述:

bzoj  luogu

题解时间:

首先考虑海拔待定点的$h$都应该是多少

很明显它们都是$0$或$1$,并且所有$0$连成一块,所有$1$连成一块

只有海拔交界线对答案有贡献,变成了最小割

但是数据范围很明显不能直接跑网络流

由于这是一个平面图,所以根据套路想到:

平面图最小割=对偶图最小环=最外一块面积分成$S$和$T$跑最短路

从左上角往右下角画一条线把外面一块分成$S$和$T$之后建图。

但是要注意这张图上同一条边两个方向权值不同。

那么建边也按照相同方向,即对应向右下方向的边的新建边为$S$->$T$方向,向左上的反之。

然后就可以跑最短路了。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
typedef long long lint;
namespace LarjaIX
{
const int N=511;
int n,id[N][N];
struct sumireko{int to,ne,w;}e[N*N*8];
int he[N*N*2],ecnt;
void addline(int f,int t,int w)
{
e[++ecnt].to=t,e[ecnt].w=w;
e[ecnt].ne=he[f],he[f]=ecnt;
}
struct shion
{
int x;lint d;
shion(){}
shion(int x,lint d):x(x),d(d){}
bool operator < (const shion &a)const{return d>a.d;}
}stmp;
priority_queue<shion>q;
lint dis[N*N*2];
bool vis[N*N*2];
void dijkstra(int sp,int ep)
{
memset(dis,0x3f,sizeof(dis));
q.push(shion(sp,dis[sp]=0));
while(!q.empty())
{
stmp=q.top(),q.pop();
int x=stmp.x;
if(vis[x]) continue;vis[x]=1;
for(int i=he[x],t=e[i].to;i;i=e[i].ne,t=e[i].to)
{
if(dis[t]>dis[x]+e[i].w)
{
dis[t]=dis[x]+e[i].w;
q.push(shion(t,dis[t]));
}
}
}
printf("%lld\n",dis[ep]);
}
int wi;
int maid()
{
#ifdef debug
freopen("sample.in","r",stdin);
freopen("debug.out","w",stdout);
#endif
scanf("%d",&n);
for(int i=1;i<=n;i++)id[i][0]=id[n+1][i]=0,id[0][i]=id[i][n+1]=n*n+1;
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) id[i][j]=(i-1)*n+j;
for(int i=0;i<=n;i++)for(int j=1;j<=n;j++)
scanf("%d",&wi),addline(id[i+1][j],id[i][j],wi);
for(int i=1;i<=n;i++)for(int j=0;j<=n;j++)
scanf("%d",&wi),addline(id[i][j],id[i][j+1],wi);
for(int i=0;i<=n;i++)for(int j=1;j<=n;j++)
scanf("%d",&wi),addline(id[i][j],id[i+1][j],wi);
for(int i=1;i<=n;i++)for(int j=0;j<=n;j++)
scanf("%d",&wi),addline(id[i][j+1],id[i][j],wi);
dijkstra(0,n*n+1);
return 0;
}
}
int main(){return LarjaIX::maid();}

bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. bzoj1001平面图最小割转对偶图最短路

    https://www.lydsy.com/JudgeOnline/problem.php?id=1001 很明显的求对偶图的最短路即可(由于特判写错了一直wa = = ) //#pragma com ...

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

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

随机推荐

  1. Note/Solution -「洛谷 P5158」「模板」多项式快速插值

    \(\mathcal{Description}\)   Link.   给定 \(n\) 个点 \((x_i,y_i)\),求一个不超过 \(n-1\) 次的多项式 \(f(x)\),使得 \(f(x ...

  2. Solution -「CF 1023F」Mobile Phone Network

    \(\mathcal{Description}\)   Link.   有一个 \(n\) 个结点的图,并给定 \(m_1\) 条无向带权黑边,\(m_2\) 条无向无权白边.你需要为每条白边指定边权 ...

  3. Vue2.0源码学习(2) - 数据和模板的渲染(下)

    vm._render是怎么实现的 上述updateComponent方法调用是运行了一个函数: // src\core\instance\lifecycle.js updateComponent = ...

  4. CPU优化之平均负载率之辅助工具

    前面介绍了平均负载均衡的一些内容,那实际应用中如何查看,分析性能瓶颈呢?下面介绍相关的辅助工具. 一.stress stress是Linux 系统压力测试工具,其通过异常进程模拟平均负载升高的场景(前 ...

  5. kali系统语言设置

    一.背景信息在安装完 kali linux 2020.1 时,其操作系统默认语言为英文的,我们操作起来比较麻烦,为了以后操作方便起见,这边将其操作系统默认语言更改为中文.本篇文章将带领各位小伙伴们一起 ...

  6. RFC3918组播转发时延测试——网络测试仪实操

    一.简介 1.RFC3918简介 历史 · 在1999年3月成为正式标准 功能 · 评测网络互连设备或网络系统的性能 · 网络设备: 交换机,路由器- 内容 · 定义了一整套测试方法,为不同厂家的设备 ...

  7. Smartbi实践:制作可视化分析报表的感悟

    ​估计看到这篇文章的朋友,都是有使用过Smartbi制作数据可视化图表的.但是不是制作过程跟制作效果并没有让自己那么满意.使用过程也经常遇到一些问题解决不了?那是因为你使用的方法不对.你是否在使用Sm ...

  8. 替代Tableau,思迈特软件Smartbi让Excel成为企业级自助分析平台

        谈到企业级自助分析平台,大家自然会想到Tableau,在Garnter最新的BI平台魔力象限中,是这么描述Tableau的. "Tableau is a Leader in this ...

  9. java策略模式拙见

    面向对象的两个基本准则: 单一职责:一个类只有一个发生变化的原因 开闭原则:对拓展开放,对修改关闭 <Java开发手册>中,有这样的规则:超过3层的 if-else 的逻辑判断代码可以使用 ...

  10. 什么是句柄C#

    话不多说,下面分享下我对句柄的看法. 如果没有意外的话,ABCDE他们将依次进行占用CPU资源.但是可能会发生如下情况 句柄,就是用来维护进程或者系统范围内的一个标识.就比如我们去访问一个文件的时候, ...