博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NOI 2010 海拔 ——平面图转对偶图
阅读量:6616 次
发布时间:2019-06-25

本文共 2413 字,大约阅读时间需要 8 分钟。

【题目分析】

    可以知道,所有的海拔是0或1

    最小割转最短路,就可以啦

    SPFA被卡,只能换DIJ

【代码】

#include 
#include
#include
#include
#include
using namespace std;#define maxn 2000005int 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
,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
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]);}

  

转载于:https://www.cnblogs.com/SfailSth/p/6212217.html

你可能感兴趣的文章
firebug的使用方法和技巧(web开发调试工具)
查看>>
web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例...
查看>>
delphi WebBrowser的使用方法详解(五)-难点释疑
查看>>
python中年月日只保留年月_气轻Python04.只保留日期去掉时间
查看>>
乖离性暗机器人_乖离性百万亚瑟王超弩暗机器人平民通关攻略 超弩暗机器人怎么打...
查看>>
gitlab 私有公共库_搭建gitlab私有库
查看>>
jupyter notebook新建python3空白_jupyter notebook打开空白
查看>>
ddr5内存上市时间_DDR5内存或将在2020年进入量产阶段
查看>>
java string 过长_Java一些基础问题
查看>>
angular同源策略禁止读取_如何禁止软件安装在C盘?教你1招,轻松缓解空间不足,电脑不再卡顿!...
查看>>
数据分析sql面试必会6题经典_SQL面试经典50题(二)——6-10题解析
查看>>
x9此计算机上没有hasp_语言模型上
查看>>
一般市区有测速吗_高速开车突然限速80,要紧急刹车吗?这样做既安全又不会违章...
查看>>
linux搭建vsftp服务器_linux搭建NTP服务器
查看>>
全云端万能小程序_专业小程序制作 全行业小程序设计解决方案
查看>>
wince上运行python_全世界都公认的运行Python最简单方法
查看>>
t检验python程序_假设检验原理及假设检验在python的应用
查看>>
mysql数据库的行级锁有几种_MySQL数据库中的全局锁、表级锁、行级锁
查看>>
matlab怎么把音频变成信号_iPhone信号怎么变成小圆点?iOS12免越狱改回小圆点信号图文教程...
查看>>
python显示excel可视化html_我用Python做了一份PDF报告!!!
查看>>