题目链接[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 海拔的更多相关文章

  1. luogu2046[NOI2010]海拔 对偶图优化

    luogu2046[NOI2010]海拔 对偶图优化 链接 https://www.luogu.org/problemnew/show/P2046 思路 海拔一定是0或者1,而且会有一条01交错的分界 ...

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

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

  3. BZOJ 2007: [Noi2010]海拔

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

  4. NOI 2010 海拔 ——平面图转对偶图

    [题目分析] 可以知道,所有的海拔是0或1 最小割转最短路,就可以啦 SPFA被卡,只能换DIJ [代码] #include <cstdio> #include <cstring&g ...

  5. 【BZOJ-2007】海拔 最小割 (平面图转对偶图 + 最短路)

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

  6. Bzoj2007 [Noi2010]海拔

    Time Limit: 20 Sec  Memory Limit: 552 MB Submit: 2380  Solved: 1130 Description YT市是一个规划良好的城市,城市被东西向 ...

  7. 2007: [Noi2010]海拔 - BZOJ

    Description YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作一个正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)× ...

  8. NOI2010海拔

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

  9. Swift - 使用CoreLocation实现定位(经纬度、海拔、速度、距离等)

    CoreLocation是iOS中一个提供设备定位的框架.通过这个框架可以实现定位处理,从而获取位置数据,比如经度.纬度.海拔信息等.   1,定位精度的设置 定位服务管理类CLLocationMan ...

随机推荐

  1. mysql 无法远程连接 没有监听端口

    centos yum安装mysql: 远程连接完成用户授权和防火墙配置,可还是连接不上. 发现mysql没有监听3306端口. 修改mysql配置文件 vi /etc/my.conf 注释掉以下行,重 ...

  2. Flask中的实例化配置

    也就是在app=Flask(__name__)括号中的参数 1.static_folder = 'static', # 静态文件目录的路径 默认当前项目中的static目录 2.static_url_ ...

  3. accomplish、complete、finish、achieve和fulfill

    accomplish to succeed in doing something, especially after trying very hard vt. 完成:实现:达到 complete us ...

  4. spring boot添加logging不能启动且不报错

    1.问题: application.yml中添加logging启动失败,不报错,去除后又正常 logging: config: classpath:test-logback-spring.xml报错 ...

  5. JS-在本页面禁止页面返回

    这个问题是最近遇到的 解决方案我百度的并测试有效 // 如果你希望用户不用有返回功能 可缩写如下 或使用location.replace('url')跳转链接 history.pushState(nu ...

  6. js-用判断音乐或图片是否加载完成的方式来控制页面的现实

    判断页面加载,加完完成后,内容页显示,加载条隐藏 百度搜索方法很多,大多都是: document.onreadystatechange = function() //当页面加载状态改变的时候执行fun ...

  7. [Web 前端] 014 css 盒子模型

    1. 简介 元素在页面中显示成一个方块,类似一个盒子 把元素叫做盒子,设置对应的样式分别为 盒子的边框(border) 盒子内的内容和边框之间的间距(padding) 盒子与盒子之间的间距(margi ...

  8. Java方法多态性——方法的重载Overload和重写Override

    方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式. 重写(Override) 重写是 ...

  9. [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)

    [BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...

  10. BZOJ 1875(DP+矩阵快速幂)

    题面 传送门 分析 容易想到根据点来dp,设dp[i][j]表示到i点路径长度为j的方案数 状态转移方程为dp[i][k]=∑(i,j)∈Edp[j][k−1]" role="pr ...