Vijos1734 NOI2010 海拔 平面图最小割
建立平面图的对偶图,把最小割转化成最短路问题
Dijkstra算法堆优化
(被输入顺序搞WA了好几次T_T)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
;
const int maxV=maxN*maxN;
const int inf=0x3f3f3f3f;
struct Edge
{
int to,next;
int dist;
void assign(int t,int n,int d)
{ to=t; next=n; dist=d; }
};
Edge elist[maxV*];
int head[maxV];
int ecnt;
int N;
int dest;
void initEdge()
{
memset(head,-,sizeof(head));
ecnt=;
}
inline void addEdge(int from,int to,int dist)
{
elist[ecnt].assign(to,head[from],dist);
head[from]=ecnt++;
}
void input()
{
scanf("%d",&N);
dest=N*N+;
initEdge();
int w;
;j<=N;j++)
;i<=N;i++)
{
scanf("%d",&w);
,i,w);
else if(j==N) addEdge(N*N+i-N,dest,w);
else addEdge(N*j+i-N,N*j+i,w);
}
;j<=N;j++)
;i<=N;i++)
{
scanf("%d",&w);
-N,dest,w);
,N*j,w);
-N,N*j+i-N,w);
}
;j<=N;j++)
;i<=N;i++)
{
scanf("%d",&w);
if(!j || j==N) continue;
else addEdge(N*j+i,N*j+i-N,w);
}
;j<=N;j++)
;i<=N;i++)
{
scanf("%d",&w);
if(!i || i==N) continue;
-N,w);
}
}
struct Vertex
{
int idx;
int dist;
Vertex() {}
Vertex(int i,int d):idx(i),dist(d) {}
bool operator < (const Vertex& other) const
{ return this->dist > other.dist; }
};
int dist[maxV];
int open[maxV];
std::priority_queue<Vertex> que;
int dijkstra()
{
memset(dist,0x3f,sizeof(dist));
memset(open,,sizeof(open));
dist[]=; open[]=false;
;
while(cur!=dest)
{
;e=elist[e].next)
{
int& to=elist[e].to;
int& len=elist[e].dist;
if(open[to] && dist[to]>dist[cur]+len)
{
dist[to]=dist[cur]+len;
que.push(Vertex(to,dist[to]));
}
}
Vertex vt;
do { vt=que.top(); que.pop(); }
while(!open[vt.idx]);
cur=vt.idx;
open[cur]=false;
}
return dist[dest];
}
int main()
{
input();
printf("%d\n",dijkstra());
;
}
Vijos1734 NOI2010 海拔 平面图最小割的更多相关文章
- bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路)
bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路) 题目描述: bzoj luogu 题解时间: 首先考虑海拔待定点的$h$都应该是多少 很明显它们都是$0$或$1$,并且所 ...
- BZOJ2007/LG2046 「NOI2010」海拔 平面图最小割转对偶图最短路
问题描述 BZOJ2007 LG2046 题解 发现左上角海拔为 \(0\) ,右上角海拔为 \(1\) . 上坡要付出代价,下坡没有收益,所以有坡度的路越少越好. 所以海拔为 \(1\) 的点,和海 ...
- BZOJ 2007 海拔(平面图最小割转对偶图最短路)
首先注意到,把一个点的海拔定为>1的数是毫无意义的.实际上,可以转化为把这些点的海拔要么定为0,要么定为1. 其次,如果一个点周围的点的海拔没有和它相同的,那么这个点的海拔也是可以优化的,即把这 ...
- 洛谷P2046 [NOI2010]海拔(最小割,平面图转对偶图)
传送门 不明白为什么大佬们一眼就看出这是最小割…… 所以总而言之这就是一个最小割我也不知道为什么 然后边数太多直接跑会炸,所以要把平面图转对偶图,然后跑一个最短路即可 至于建图……请看代码我实在无能为 ...
- bzoj 2007: [Noi2010]海拔【最小割+dijskstra】
上来就跑3e5的最大流--脑子抽了 很容易看出,每个地方的海拔都是0或1因为再高了没有意义,又,上去下来再上去没有意义,所以最后一定是从s连着一片0,剩下连着t一片1,然后有贡献的就是01交接的那些边 ...
- B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij
B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij 题意:城市被东西向和南北向的主干道划分为n×n个区域.城市中包括(n+1)×(n+1)个交叉路口和2n×(n+1)条双向 ...
- 【BZOJ2007】【NOI2010】海拔(最小割,平面图转对偶图,最短路)
[BZOJ2007][NOI2010]海拔(最小割,平面图转对偶图,最短路) 题面 BZOJ 洛谷 Description YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域. ...
- [BZOJ 2007] [Noi2010] 海拔 【平面图最小割(对偶图最短路)】
题目链接:BZOJ - 2007 题目分析 首先,左上角的高度是 0 ,右下角的高度是 1.那么所有点的高度一定要在 0 与 1 之间.然而选取 [0, 1] 的任何一个实数,都可以用整数 0 或 1 ...
- Luogu2046 NOI2010 海拔 平面图、最小割、最短路
传送门 首先一个不知道怎么证的结论:任意点的\(H\)只会是\(0\)或\(1\) 那么可以发现原题的本质就是一个最小割,左上角为\(S\),右下角为\(T\),被割开的两个部分就是\(H=0\)与\ ...
随机推荐
- 用Delphi7开发Web Service程序 转
转:http://rosehacker.blog.51cto.com/2528968/450160 用Delphi7开发Web Service程序,并把服务程序放在IIS Web服务器上提供给 ...
- URAL1079
Problem E Time Limit : 4000/2000ms (Java/Other) Memory Limit : 32768/16384K (Java/Other) Total Sub ...
- Mac下搭建Eclipse Android开发环境
之前一直是用windows搞android开发,但windows这个性能也真是让人醉了,终于一狠心,砸锅卖铁买了Mac.然后就开始在Mac上搭建android开发环境, 其实也不麻烦,关键是找准下载地 ...
- 折腾iPhone的生活——运营商信号显示数据化
iOS7以后iphone的信号都是用5个小圆圈显示的,像这样 但是还有种显示方法可以用数字信号显示信号量,比较适合很专注于生活品质的人和对数字有偏爱的人,像这样: 这样还有个好处是可以节约顶部状态栏的 ...
- (转载)绿色版Mysql的安装配置
本文出自于:http://johnnyhg.javaeye.com/blog/245544 一.下载MySQL http://www.mysql.org/downloads 我下载的是mysql-no ...
- mysqldump的常用语句及各参数详解
mysqldump的常用语句及各参数详解 分类: MySQL 2011-01-11 17:55 1368人阅读 评论(0) 收藏 举报 数据库mysql服务器tableinsertdatabase m ...
- Java多线程实现简单的售票程序
设计一个多线程程序如下:设计一个火车售票模拟程序.假如火车站要有100张火车票要卖出,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况 1.要求打印出每个售票点所卖出的票号 2.各售票点 ...
- python 分支 循环
一 python 知识点 1.变量(标签): a(变量名) = '字符串'or 数字 (整形和浮点型) a相当于变量名的标签 如: a = ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码 上一讲我们创建了一系列的解决方案,我们通过一个例子来看看层与层之间的关系 ...
- Hash表——The Hash table
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "list.h&q ...