NOI 2010 海拔 ——平面图转对偶图
【题目分析】
可以知道,所有的海拔是0或1
最小割转最短路,就可以啦
SPFA被卡,只能换DIJ
【代码】
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
#define maxn 2000005
int h[maxn],to[maxn],ne[maxn],w[maxn],en=0;
int read()
{
int x=0,f=1; char ch=getchar();
while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}
while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
int dis[maxn];
struct cmp{
bool operator () (const int &a,const int &b)
{return dis[a]>dis[b];}
};
struct Table
{
int h[maxn],ne[maxn],to[maxn],w[maxn],vis[maxn];
priority_queue <int,vector <int>,cmp> q;
int en;
void init()
{
memset(h,-1,sizeof h);
en=0;
while (!q.empty()) q.pop();
}
void add(int a,int b,int c)
{
ne[en]=h[a];
to[en]=b;
w[en]=c;
h[a]=en++;
}
void dij(int s)
{
memset(dis,0x3f,sizeof dis);
memset(vis,0,sizeof vis);
dis[s]=0;
q.push(s);
vis[s]=1;
while (!q.empty())
{
int x=q.top(); q.pop(); vis[x]=0;
for (int i=h[x];i>=0;i=ne[i])
{
if (dis[to[i]]>dis[x]+w[i])
{
dis[to[i]]=dis[x]+w[i];
if (!vis[to[i]])
{
vis[to[i]]=1;
q.push(to[i]);
}
}
}
}
}
}map;
void add(int a,int b,int c)
{
to[en]=b;
ne[en]=h[a];
w[en]=c;
h[a]=en++;
}
int n,S=0,T=maxn-1;
int hash[605][605],cnt=0;
int inq[maxn];
void SPFA()
{
queue <int> q;
memset(dis,0x3f,sizeof dis);
while (!q.empty()) q.pop();
q.push(S); inq[S]=1; dis[S]=0;
while (!q.empty())
{
int x=q.front(); q.pop(); inq[x]=0;
for (int i=h[x];i>=0;i=ne[i])
{
if (dis[to[i]]>dis[x]+w[i])
{
dis[to[i]]=dis[x]+w[i];
if (!inq[to[i]])
{
inq[to[i]]=1;
q.push(to[i]);
}
}
}
}
printf("%d\n",dis[T]);
}
int main()
{
map.init();
memset(h,-1,sizeof h);
n=read();
for (int i=0;i<=n+1;++i)
for (int j=0;j<=n+1;++j)
hash[i][j]=++cnt;
for (int i=0;i<=n+1;++i) hash[0][i]=maxn-1;
for (int i=0;i<=n+1;++i) hash[n+1][i]=0;
for (int i=0;i<=n+1;++i) hash[i][0]=0;
for (int i=0;i<=n+1;++i) hash[i][n+1]=maxn-1;
for (int i=1;i<=n+1;++i)
for (int j=1;j<=n;++j)
{
int tmp=read();
map.add(hash[i][j],hash[i-1][j],tmp);
}
for (int i=1;i<=n;++i)
for (int j=1;j<=n+1;++j)
{
int tmp=read();
map.add(hash[i][j-1],hash[i][j],tmp);
}
for (int i=1;i<=n+1;++i)
for (int j=1;j<=n;++j)
{
int tmp=read();
map.add(hash[i-1][j],hash[i][j],tmp);
}
for (int i=1;i<=n;++i)
for (int j=1;j<=n+1;++j)
{
int tmp=read();
map.add(hash[i][j],hash[i][j-1],tmp);
}
map.dij(S);
printf("%d\n",dis[T]);
}
NOI 2010 海拔 ——平面图转对偶图的更多相关文章
- BZOJ2007 NOI2010 海拔 平面图转对偶图 最小割
题面太长啦,请诸位自行品尝—>海拔 分析: 这是我见过算法比较明显的最小割题目了,很明显对于某一条简单路径,海拔只会有一次变换. 而且我们要最终使变换海拔的边权值和最小. 我们发现变换海拔相当于 ...
- [NOI2010]海拔 平面图转对偶图 最小割
题解: 首先,我们不难猜到高度只有 $0$ 或 $1$ 两种可能,而且高度为 0 的地区组成一个联通块,高度为 1 的地区组成一个联通块.只有这样,人们所耗费的体力才是最小的.得出这个结论,题目就成了 ...
- NOI 2010 海拔(最小割转最短路)
题意 https://www.lydsy.com/JudgeOnline/problem.php?id=2007 思路 首先可以发现一个结论,每个位置的海拔只有能是 \(0\) 和 \(1\) ,然后 ...
- P2046 [NOI2010]海拔 平面图转对偶图(最小割-》最短路)
$ \color{#0066ff}{ 题目描述 }$ YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看作一个正方形. ...
- ●BZOJ 2007 NOI 2010 海拔
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2007 题解: 网络流.最小割.对偶图 奇妙的题 ~ 种种原因导致了高度要么为 0,要么为 1 ...
- 【BZOJ-2007】海拔 最小割 (平面图转对偶图 + 最短路)
2007: [Noi2010]海拔 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2095 Solved: 1002[Submit][Status] ...
- 【BZOJ2007】【NOI2010】海拔(最小割,平面图转对偶图,最短路)
[BZOJ2007][NOI2010]海拔(最小割,平面图转对偶图,最短路) 题面 BZOJ 洛谷 Description YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域. ...
- 【BZOJ 2007】 2007: [Noi2010]海拔 (平面图转对偶图+spfa)
2007: [Noi2010]海拔 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2504 Solved: 1195 Description YT市 ...
- bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路)
bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路) 题目描述: bzoj luogu 题解时间: 首先考虑海拔待定点的$h$都应该是多少 很明显它们都是$0$或$1$,并且所 ...
随机推荐
- AE开发实现GP工具IDW
IDW——空间插值 IDW(Inverse Distance Weighted)是一种常用而简便的空间插值方法,它以插值点与样本点间的距离为权重进行加权平均,离插值点越近的样本点赋予的权重越大. 设平 ...
- 创建一个点状注记(MarkerElement)
1.根据XY创建一个点 /// <summary> /// 根据x y创建新点 /// </summary> /// <param name="dX" ...
- WebPack常用功能介绍
概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...
- Java Reference简要概述
@(Java)[Reference] Java Reference简要概述 Reference对象封装了其它对象的引用,可以和普通的对象一样操作. Java提供了四种不同类型的引用,引用级别从高到低分 ...
- php多进程总结
本文部分来自网络参考,部分自己总结,由于一直保存在笔记中,并没有记录参考文章地址,如有侵权请通知删除.最近快被业务整疯了,这个等抽时间还需要好好的整理一番. 多进程--fork 场景:日常任务中, ...
- [Java] JSP笔记 - Java Bean
一. Java Bean 是什么? Java Bean 其实就是一个符合特定规则的 Java Class.这些规则包括: 使用 public 声明的公用类 属性使用public 的get,set方法访 ...
- Npoi导入导出Excel操作
之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...
- [NHibernate]代码生成器的使用
目录 写在前面 文档与系列文章 代码生成器的使用 总结 写在前面 前面的文章介绍了nhibernate的相关知识,都是自己手敲的代码,有时候显得特别的麻烦,比如你必须编写持久化类,映射文件等等,举得例 ...
- ThinkPHP3.2.3整合smarty模板(二)
前言:继ThinkPHP3.2.3整合smarty模板(一)之后,继续来探讨一下tp框架整合smarty模板,看到有人在群上问到怎么使用自定义的常量,今天就具体来谈谈: 一.开发一个项目,必不可少会用 ...
- [译]Testing Node.js With Mocha and Chai
原文: http://mherman.org/blog/2015/09/10/testing-node-js-with-mocha-and-chai/#.ViO8oBArIlJ 为什么要测试? 在此之 ...