【BZOJ】2007: [Noi2010]海拔(平面图转对偶图)
题目
传送门:QWQ
分析
左上角是0,右下角是1。那么大概整张图是由0 1构成的。
那么我们要找到0和1的分界线,值就是最小割。
然后变成求原图最小割。
考虑到此题是平面图,那么就转成对偶图跑最短路。
完了。
总结:以后看到数据在$ nlog(n) $范围内的题,给的图是方格图,给的边还方方正正,那么多半是平面图转对偶图。
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=*;
vector<int> G[maxn];
struct Edge{ int u,v,dis; };
vector<Edge> edges;
struct HeapNode{
int x,dis;
bool operator <(const HeapNode& a) const{ return dis>a.dis; }
};
void link(int u,int v,int dis){
edges.push_back((Edge){u,v,dis}); //edges.push_back((Edge){v,u,dis});
int m=edges.size(); G[u].push_back(m-);
}
int d[maxn],vis[maxn];
priority_queue<HeapNode> que;
int dijkstra(int s,int t){
memset(d,,sizeof(d));
d[s]=; que.push((HeapNode){s,}); //vis[s]=1;
while(!que.empty()){
HeapNode x=que.top(); que.pop();
if(vis[x.x]) continue; vis[x.x]=;
int u=x.x;
for(int i=;i<G[u].size();i++){
Edge& e=edges[G[u][i]];
if(d[e.v]>d[u]+e.dis){
d[e.v]=d[u]+e.dis;
que.push((HeapNode){e.v,d[e.v]});
}
}
}
return d[t];
}
int num[][];
int main(){
int n,x;scanf("%d",&n);
int s = , t = n * n + ;
for(int i = ; i <= n ; i ++ )
num[][i] = num[i][n + ] = s , num[i][] = num[n + ][i] = t;
for(int i=; i <= n ; i ++ )
for(int j = ; j <= n ; j ++ )
num[i][j] = n * (i - ) + j;
for(int i=;i<=n;i++) for(int j=;j<=n;j++) scanf("%d",&x),link(num[i][j] , num[i+][j] , x);
for(int i=;i<=n;i++) for(int j=;j<=n;j++) scanf("%d",&x),link(num[i][j+] , num[i][j] , x);
for(int i=;i<=n;i++) for(int j=;j<=n;j++) scanf("%d",&x),link(num[i+][j] , num[i][j] , x);
for(int i=;i<=n;i++) for(int j=;j<=n;j++) scanf("%d",&x),link(num[i][j] , num[i][j+] , x);
printf("%d\n",dijkstra(s,t));
return ;
}
【BZOJ】2007: [Noi2010]海拔(平面图转对偶图)的更多相关文章
- BZOJ.2007.[NOI2010]海拔(最小割 对偶图最短路)
题目链接 想一下能猜出,最优解中海拔只有0和1,且海拔相同的点都在且只在1个连通块中. 这就是个平面图最小割.也可以转必须转对偶图最短路,不然只能T到90分了..边的方向看着定就行. 不能忽略回去的边 ...
- BZOJ 2007: [Noi2010]海拔
2007: [Noi2010]海拔 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2410 Solved: 1142[Submit][Status] ...
- [BZOJ 2007] [Noi2010] 海拔 【平面图最小割(对偶图最短路)】
题目链接:BZOJ - 2007 题目分析 首先,左上角的高度是 0 ,右下角的高度是 1.那么所有点的高度一定要在 0 与 1 之间.然而选取 [0, 1] 的任何一个实数,都可以用整数 0 或 1 ...
- BZOJ2007 NOI2010 海拔 平面图转对偶图 最小割
题面太长啦,请诸位自行品尝—>海拔 分析: 这是我见过算法比较明显的最小割题目了,很明显对于某一条简单路径,海拔只会有一次变换. 而且我们要最终使变换海拔的边权值和最小. 我们发现变换海拔相当于 ...
- [NOI2010]海拔 平面图转对偶图 最小割
题解: 首先,我们不难猜到高度只有 $0$ 或 $1$ 两种可能,而且高度为 0 的地区组成一个联通块,高度为 1 的地区组成一个联通块.只有这样,人们所耗费的体力才是最小的.得出这个结论,题目就成了 ...
- P2046 [NOI2010]海拔 平面图转对偶图(最小割-》最短路)
$ \color{#0066ff}{ 题目描述 }$ YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看作一个正方形. ...
- bzoj 2007 [Noi2010]海拔——最小割转最短路
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2007 一个点的高度一定不是0就是1.答案一定形如一个左上角的连通块全是0的点.一个右下角的连 ...
- bzoj 2007: [Noi2010]海拔【最小割+dijskstra】
上来就跑3e5的最大流--脑子抽了 很容易看出,每个地方的海拔都是0或1因为再高了没有意义,又,上去下来再上去没有意义,所以最后一定是从s连着一片0,剩下连着t一片1,然后有贡献的就是01交接的那些边 ...
- 【BZOJ 2007】 2007: [Noi2010]海拔 (平面图转对偶图+spfa)
2007: [Noi2010]海拔 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2504 Solved: 1195 Description YT市 ...
- 2007: [Noi2010]海拔
2007: [Noi2010]海拔 https://www.lydsy.com/JudgeOnline/problem.php?id=2007 分析: 平面图最小割. S在左下,T在右上,从S到T的一 ...
随机推荐
- LINUX系统下APACHE中的CGI应用
该实验环境是在APACHE的配置内容的基础上实现的! 1.安装软件: yum install php -y ##安装完成后,可以在/etc/httpd/conf.d/目录下查看,有php ...
- PHP sessions that have already been started
In my PHP code, if a session has already started, and I try to start a new one, I get the following ...
- Eclipse Java EE IDE中jsp页面编码修改
Eclipse Java EE IDE模板编码是ISO8859,肯定不是我们需要的,修改方法如下图: 依次点击:Window---->Preference---->Web---->J ...
- Java多线程编程实战指南(核心篇)读书笔记(一)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76422930冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- LXC、LXD、Docker的区别与联系(by quqi99)
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 容器 namespace技术用来进行做进程间的隔 ...
- 记录一下前端ajax实现增删改功能的步骤
主要依赖三个按钮:新增,删除,编辑 新增:点击时创建新的LI或者TR并append到父级里,此时无需调动后台接口(如果新增需要弹窗输入val则可以调用): 删除:判断this是否有后台传过来的id值, ...
- 将自己的框架更新到cocopods上
为了更方便的集成第三方框架有了cocopods 的, 当我们有了相对比较好的框架的时候如何更新到cocopods 供他人参考呢? 下面我一步一步带大家开源自己的框架. 第一步 把自己的框架更新到git ...
- Mac 配置前端基本环境
一,sublime 下载一个版本,替换packages,要想shift command p管用,得在sublime里面control -,然后把 import urllib.request,os,h ...
- iOS-----解决Prefix Header出错的问题
我们在使用 Prefix Header 预编译文件时有时会遇到如下的报错 clang: error: no such file or directory: '/Users/linus/Dropbox/ ...
- stark组件03
优化代码 1:页面的增删改查url反转的封装到类里:ModelSatrk # 编辑页面的url def get_edit_url(self,obj): edit_url = reverse(" ...