luogu2046 海拔
题目链接[NOI2010]海拔
首先有个性质就是海拔只会有\(0\)和\(1\)两种。
证明:海拔下降和人数乘积为总消耗,确定了海拔下降总数,如果有个地方可以使得单位消耗最小,那么全部消耗不会更劣。
也就是求一个最小割,转化成对偶图。
左边是\(t\),右边是\(s\),上面是\(s\),下面是\(t\),这样保证了一条合法路径一定隔开了整个格子。
相邻格子连边权,上到下连左,左到右连下,其他相反,跑最短路即可。
代码:
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define R register int
#define ll long long
using namespace std;
const int N=400001;
const int yl=501;
const int M=5000001;
int cnt,n,u,s,t,tot,nt[M],to[M],hd[N],w[M],idx[yl][yl],Dis[N],vis[N];
void link(R f,R t,R d){nt[++cnt]=hd[f],to[cnt]=t,w[cnt]=d,hd[f]=cnt;}
int gi(){
R x=0,k=1;char c=getchar();
while((c<'0'||c>'9')&&c!='-')c=getchar();
if(c=='-')k=-1,c=getchar();
while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x*k;
}
struct ip{int val,id;};
int operator < (ip x,ip y){return x.val>y.val;}
priority_queue<ip>Q;
int dij(){
while(!Q.empty())Q.pop();
memset(Dis,0x7f,sizeof(Dis));
Dis[s]=0,Q.push((ip){0,s});
while(!Q.empty()){
ip S=Q.top();Q.pop();
if(vis[S.id])continue;vis[S.id]=1;
if(S.id==t)return Dis[t];
for(R k=hd[S.id];k;k=nt[k])
if(Dis[to[k]]>Dis[S.id]+w[k]){
Dis[to[k]]=Dis[S.id]+w[k];
Q.push((ip){Dis[to[k]],to[k]});
}
}
return Dis[t];
}
int main(){
n=gi();
for(R i=1;i<=n;++i)
for(R j=1;j<=n;++j)
idx[i][j]=(++tot);
s=tot+1,t=tot+2;
for(R i=1;i<=n;++i)
u=gi(),link(s,idx[1][i],u);
for(R i=2;i<=n;++i)
for(R j=1;j<=n;++j)
u=gi(),link(idx[i-1][j],idx[i][j],u);
for(R i=1;i<=n;++i)
u=gi(),link(idx[n][i],t,u);
//bei nan
for(R i=1;i<=n;++i){
u=gi(),link(idx[i][1],t,u);
for(R j=1;j<n;++j)
u=gi(),link(idx[i][j+1],idx[i][j],u);
u=gi(),link(s,idx[i][n],u);
}
//xi dong
for(R i=1;i<=n;++i)u=gi();
for(R i=2;i<=n;++i)
for(R j=1;j<=n;++j)
u=gi(),link(idx[i][j],idx[i-1][j],u);
for(R i=1;i<=n;++i)u=gi();
//nan bei
for(R i=1;i<=n;++i){
u=gi();
for(R j=1;j<n;++j)
u=gi(),link(idx[i][j],idx[i][j+1],u);
u=gi();
}
printf("%d\n",dij());
return 0;
}
luogu2046 海拔的更多相关文章
- luogu2046[NOI2010]海拔 对偶图优化
luogu2046[NOI2010]海拔 对偶图优化 链接 https://www.luogu.org/problemnew/show/P2046 思路 海拔一定是0或者1,而且会有一条01交错的分界 ...
- Luogu2046 NOI2010 海拔 平面图、最小割、最短路
传送门 首先一个不知道怎么证的结论:任意点的\(H\)只会是\(0\)或\(1\) 那么可以发现原题的本质就是一个最小割,左上角为\(S\),右下角为\(T\),被割开的两个部分就是\(H=0\)与\ ...
- BZOJ 2007: [Noi2010]海拔
2007: [Noi2010]海拔 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2410 Solved: 1142[Submit][Status] ...
- NOI 2010 海拔 ——平面图转对偶图
[题目分析] 可以知道,所有的海拔是0或1 最小割转最短路,就可以啦 SPFA被卡,只能换DIJ [代码] #include <cstdio> #include <cstring&g ...
- 【BZOJ-2007】海拔 最小割 (平面图转对偶图 + 最短路)
2007: [Noi2010]海拔 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2095 Solved: 1002[Submit][Status] ...
- Bzoj2007 [Noi2010]海拔
Time Limit: 20 Sec Memory Limit: 552 MB Submit: 2380 Solved: 1130 Description YT市是一个规划良好的城市,城市被东西向 ...
- 2007: [Noi2010]海拔 - BZOJ
Description YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作一个正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)× ...
- NOI2010海拔
2007: [Noi2010]海拔 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 1302 Solved: 612[Submit][Status] ...
- Swift - 使用CoreLocation实现定位(经纬度、海拔、速度、距离等)
CoreLocation是iOS中一个提供设备定位的框架.通过这个框架可以实现定位处理,从而获取位置数据,比如经度.纬度.海拔信息等. 1,定位精度的设置 定位服务管理类CLLocationMan ...
随机推荐
- SIEM中心日志节点WEF搭建说明
https://www.freebuf.com/articles/es/197812.html
- TypeScript快速笔记(一)
刚学习TypeScript,但因为马上要用,主要是寻求先快速上手,而后再求精. 推荐学习网站: 1)https://www.runoob.com/typescript/ts-tutorial.html ...
- fedora23解决gedit和vim中文乱码的问题
fedora23解决gedit和vim中文乱码的问题 a, an, the这些不定/定 冠词并不是在所有的名词 前面都要加. 只有在语义上需要时,才加. 名词的单数/复数 前面不加 冠词的 例子多的是 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_03 过滤器_1_FileFilter过滤器的原理和使用
FileFilter 需要先定义接口的实现类.并重写过滤的方法 使用 并没有起作用 过滤器的原理 缺少了a.java和b.java 如果是文件夹,就返回true,那么就会返回到Files[]数组中.然 ...
- 测开之路一百二十四:flask之MVC响应过程
MVC流程 原本的请求响应 结构: 视图: from flask import Flask, render_template app = Flask(__name__) @app.route(&quo ...
- delphi中如何实现文件的复制?
http://zhidao.baidu.com/link?url=nyAzCpeXAbaT8M3qqAePCF1Zr7q-oK4hpAUNIaRYpHcbmIwYsLr1TXoTt8759HtR1EB ...
- struts2 基础4 验证器、 国际化
验证器: 验证器:用户输入验证 1.手动编程方式 )对于动作类中所有方法进行验证 a.动作类继承ActionSuport b.覆盖调用public void validate(){} 方法 c.在va ...
- 并查集入门(hdu1232“畅通工程”)
在学习并查集之前,首先需要明白基本的并查集可以完成的功能.并查集主要是用于处理不相交集合的合并问题.它是一种基础算法,在离散数学中,可以利用并查集求一个图的连通分支,利用其这个特性可以为我们解决一系列 ...
- Struts2异常:HTTP Status 404 - There is no Action mapped for action name addBook.
HTTP Status 404 - There is no Action mapped for action name addBook. 在地址栏进行访问的时候,出现了这个错误信息,导致出现此异常的原 ...
- 自己挖的坑自己填--JVM报内存溢出
在写定时任务时,对表数据进行批量操作,测试数据有10万条左右,在测试时发现跑着跑着出现内存溢出现象,最后发现创建的对象paramList 和tmBeanList没有被回收,经过资料查找,发现是循环内不 ...