luogu2046[NOI2010]海拔 对偶图优化

链接

https://www.luogu.org/problemnew/show/P2046

思路

海拔一定是0或者1,而且会有一条01交错的分界线。

转化为最小割,用对偶图优化求得。最小割论文写的特清楚。

代码

#include <iostream>
#include <cstring>
#include <queue>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=2e6+7,inf=0x3f3f3f3f;
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
int n,m,S,T;
struct edge {
int v,nxt,q;
}e[N*5];
int head[N*5],tot;
void add(int u,int v,int q) {
// cout<<u<<" "<<v<<"\n";
e[++tot].v=v;
e[tot].q=q;
e[tot].nxt=head[u];
head[u]=tot;
}
struct node {
int x,y;
bool operator < (const node &b) const {
return x>b.x;
}
};
priority_queue<node> q;
int dis[N];
void dij() {
memset(dis,0x3f,sizeof(dis));
q.push((node){0,S});
dis[S]=0;
while(!q.empty()) {
node u=q.top();
q.pop();
if(u.x!=dis[u.y]) continue;
// cout<<head[S]<<" "<<<<"\n";
for(int i=head[u.y];i;i=e[i].nxt) {
int v=e[i].v;
// cout<<u.y<<" -> "<<v<<" "<<e[i].q<<"\n";
if(dis[v]>dis[u.y]+e[i].q) {
dis[v]=dis[u.y]+e[i].q;
q.push((node){dis[v],v});
}
}
}
}
int main() {
// freopen("testdata.in","r",stdin);
n=read();
S=n*n*2+1,T=n*n*2+2;
for(int i=1,x,TX,TY;i<=n+1;++i) {
for(int j=1;j<=n;++j) {
x=read();
TX=(i-1)*n+j-n,TY=(i-1)*n+j;
if(i==1) TX=S;
if(i==n+1) TY=T;
add(TX,TY,x);
}
}
for(int i=1,x,TX,TY;i<=n;++i) {
for(int j=1;j<=n+1;++j) {
x=read();
TX=(i-1)*n+j-1,TY=(i-1)*n+j;
if(j==1) TX=T;
if(j==n+1) TY=S;
add(TY,TX,x);
}
}
for(int i=1,x,TX,TY;i<=n+1;++i) {
for(int j=1;j<=n;++j) {
x=read();
TX=(i-1)*n+j-n,TY=(i-1)*n+j;
if(i==1) TX=S;
if(i==n+1) TY=T;
swap(TX,TY);
add(TX,TY,x);
}
}
for(int i=1,x,TX,TY;i<=n;++i) {
for(int j=1;j<=n+1;++j) {
x=read();
TX=(i-1)*n+j-1,TY=(i-1)*n+j;
if(j==1) TX=T;
if(j==n+1) TY=S;
swap(TX,TY);
add(TY,TX,x);
}
}
dij();
printf("%d\n",dis[T]);
return 0;
}

luogu2046[NOI2010]海拔 对偶图优化的更多相关文章

  1. bzoj2007 NOI2010 海拔(对偶图)

    80分(最小割)思路 先考虑如果没有题目中东南角为\(1\)那个限制的话会怎样. 那么只要让每个点的海拔都是\(0\)就行了.这样不论怎样走,最后的答案都是0. 然后再考虑那个东南角为\(1\)的限制 ...

  2. 【BZOJ2007】[Noi2010]海拔 对偶图最短路

    [BZOJ2007][Noi2010]海拔 Description YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看 ...

  3. Luogu2046 NOI2010 海拔 平面图、最小割、最短路

    传送门 首先一个不知道怎么证的结论:任意点的\(H\)只会是\(0\)或\(1\) 那么可以发现原题的本质就是一个最小割,左上角为\(S\),右下角为\(T\),被割开的两个部分就是\(H=0\)与\ ...

  4. [BZOJ2007][NOI2010]海拔(对偶图最短路)

    首先确定所有点的海拔非0即1,问题转化成裸的平面图最小割问题,进而转化成对偶图最短路(同BZOJ1002). 这题的边是有向的,所以所有边顺时针旋转90度即可. 如下图(S和T的位置是反的). #in ...

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

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

  6. 图论(对偶图):COGS 470. [NOI2010]海拔

    470. [NOI2010]海拔 ★★★☆   输入文件:altitude.in   输出文件:altitude.out   简单对比 时间限制:2 s   内存限制:512 MB 海拔 [问题描述] ...

  7. 【BZOJ 2007】 2007: [Noi2010]海拔 (平面图转对偶图+spfa)

    2007: [Noi2010]海拔 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2504  Solved: 1195 Description YT市 ...

  8. BZOJ 2007: [Noi2010]海拔

    2007: [Noi2010]海拔 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2410  Solved: 1142[Submit][Status] ...

  9. NOI2010海拔

    2007: [Noi2010]海拔 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 1302  Solved: 612[Submit][Status] ...

随机推荐

  1. Linux 的基本操作(初识linux)

    linux世界 [Linux 系统启动过程] Linux的启动其实和windows的启动过程很类似,不过windows我们是无法看到启动信息的,而linux启动时我们会看到许多启动信息,例如某个服务是 ...

  2. js运用3

    1. js的本质就是处理数据.数据来自于后台的数据库. 所以变量就起到一个临时存储数据的作用. ecmascript制定了js的数据类型. 数据类型有哪些? 1. 字符串 string 2. 数字 n ...

  3. Linux 中如何用源代码安装软件,以及如何卸载它

    https://www.linuxidc.com/Linux/2017-12/149839.htm http://www.openssh.com/ http://www.openssh.com/por ...

  4. java异常处理解决方案

    一.异常概念 Throwable类是Java中所有错误或异常的超类. 1.只有当对象是此类(或其子类)的实例时,才能通过Java虚拟机或着Java throw语句抛出.     2.只有此类或其子类才 ...

  5. Centos下搭建邮件服务器

    一.协议 SMTP:用于发送邮件 POP3:用于接收邮件,接收后会将服务器上邮件删除 IMAP:用于接收邮件,接收后不会删除服务器邮件 二.几个重要的角色 MUA:可以理解为收取邮件的工具,比如thu ...

  6. PyQt5的安装及基本配置

    安装PyQt5 注:Pyqt5只支持python3.5以上版本 Mac安装 Mac上使用编译安装的话,后面使用pyinstaller打包可能会出问题,推荐使用命令行一键安装,Linux如果包管理没有的 ...

  7. 经典的PHPer为什么被认为是草根?

    PHPer是草根吗? 从PHP诞生之日起,PHP就开始在Web应用方面为广大的程序员服务.同时,作为针对Web开发量身定制的脚本语言,PHP一直秉承简单.开源的思想,这也使得PHP得以快速的发展,并且 ...

  8. Mac下搭建solr搜索引擎与PHP扩展开发(下)

    [接上一篇]https://www.cnblogs.com/rxbook/p/10716759.html [下载php的solr扩展] 现在开始使用php和solr交互了,所以必需安装solr扩展,下 ...

  9. kubectl批量删除pvc

    #!/bin/bashkubectl get pvc |grep hub > tmp.txtcat tmp.txt |awk '{split($0,a," ");print ...

  10. 解决bootstrap 模态框 数据清除 验证清空

    $("#switchModel").on("hidden.bs.modal", function () { $('#ware-form')[0].reset() ...