题意:给定一个N*N的网格,每个格点均与周围的八个点连边,每条边有一个边权,求安排每个点的点权h,使$\sum\limits_{e \in G} {e.w \times \min \{ ({h_{e.u}} - {h_{e.v}}),0\} }$最小

题解:所有高度一定不是0就是1,而且一定有一条线使得这条线一边是0,另一边是1。显然最小割。然后这是个平面图,Dijkstra随便跑。

#include <queue>
#include <functional>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <climits>
#include <iostream>
#include <algorithm>
using namespace std;const int MAXN=500+2;
const int MAXM=6000000+2;
struct HASH{int u,w;HASH *next;HASH(){}HASH(int _u,int _w,HASH *_next):u(_u),w(_w),next(_next){}
}*table[MAXM],mem[MAXM];
struct EDGE{int u,w;EDGE(){}EDGE(int _u,int _w):u(_u),w(_w){}bool friend operator<(EDGE a,EDGE b){ a.w>a.w;}
};
int N,cnt,g[MAXN][MAXN],d[MAXM];
priority_queue<EDGE> q;void Insert(int u,int v,int w){ table[u]=&(mem[cnt++]=HASH(v,w,table[u]));}int Dijkstra(int s,int t){memset(d,0X7F,sizeof(d));d[s]=0,q.push(EDGE(s,0));int x;while(!q.empty()){x=q.top().u,q.pop();for(HASH *p=table[x];p;p=p->next)if(d[p->u]>d[x]+p->w){d[p->u]=d[x]+p->w;q.push(EDGE(p->u,d[p->u]));}}return d[t];
}int main(){cin >> N;cnt=1;for(int i=1;i<=N;i++)for(int j=1;j<=N;j++)g[i][j]=++cnt;for(int i=1;i<=N;i++) g[i][0]=g[N+1][i]=1;cnt=0;for(int i=1,w;i<=N+1;i++)for(int j=1;j<=N;j++){cin >> w;Insert(g[i-1][j],g[i][j],w);}for(int i=1,w;i<=N;i++)for(int j=1;j<=N+1;j++){cin >> w;Insert(g[i][j],g[i][j-1],w);}for(int i=1,w;i<=N+1;i++)for(int j=1;j<=N;j++){cin >> w;Insert(g[i][j],g[i-1][j],w);}for(int i=1,w;i<=N;i++)for(int j=1;j<=N+1;j++){cin >> w;Insert(g[i][j-1],g[i][j],w);}cout << Dijkstra(0,1) << endl;return 0;
}

View Code

转载于:https://www.cnblogs.com/WDZRMPCBIT/p/6481360.html

BZOJ2007 NOI2010 海拔 网络流+最短路相关推荐

  1. 洛谷2046 BZOJ2007 NOI2010 海拔 平面图最小割

    题目链接 题意: 给你一个网格图,正反边边权不同,从海拔低的地方到海拔高的地方的代价是海拔差乘边权,海拔高到海拔低的地方不需要代价.左上角海拔是0,右下角海拔是1,让你任意安排其他点的海拔,使得每条边 ...

  2. bzoj2007: [Noi2010]海拔

    今天各位D初一小猴子的情景 你学网络流? 来来来师兄给你来几题? 无源汇有上下界费用流会不会? 最大权闭合子图会不会? 黑白染色会不会? 这都不会? 菜鸡yzh:你能不能不用网络流做狼抓兔子 ... ...

  3. bzoj 2007 [Noi2010]海拔——最小割转最短路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2007 一个点的高度一定不是0就是1.答案一定形如一个左上角的连通块全是0的点.一个右下角的连 ...

  4. BZOJ 2007: [Noi2010]海拔

    同1001一样,对偶图最小割转最短路 又被卡spfa= = 话说为什么总是有些人总喜欢卡spfa,又好写一般情况又快,为何老是要逼人写迪杰斯特拉= = 要就题目直接说会卡spfa嘛 好吧其实是前几天考 ...

  5. P4300-[AHOI2006]上学路线【网络流,最短路】

    正题 题目链接:https://www.luogu.com.cn/problem/P4300 题目大意 nnn个点mmm条边的无向图.求1∼n1\sim n1∼n的最短路和删除cic_ici​和最小的 ...

  6. NOI2010~NOI2018选做

    [NOI2010] [NOI2010]海拔 高度只需要0/1,所以一个合法方案就是一个割,平面图求最小割. [NOI2010]航空管制 反序拓扑排序,每次取出第一类限制最大的放置,这样做答案不会更劣. ...

  7. 一些有难度的网络流问题

    本质是线性规划 最小割建模 NOI2010 海拔 一个的网格,每跳变的两个方向都有一定数目的人流,每个格点都有海拔,一个人爬坡需要付出高度差的代价,下坡不付出代价,左下角高度为,右上角高度为,求安排其 ...

  8. 网络流题集【夏天的风】

    [HDU] 1532Drainage Ditches(基础)    [最大流] 3549 Flow Problem(基础)    [最大流] 3572 Task Schedule    [最大流]任务 ...

  9. 一句话题解(20170801~20170125)

    8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...

最新文章

  1. 校园网安全问题分析与对策
  2. seaborn系列 (13) | 点图pointplot()
  3. 诗与远方:无题(五十七)
  4. MySQL裸机性能测试(2021)
  5. C#的Timer解析
  6. java生成world文件_Hello World 项目创建与项目配置文件介绍
  7. 4.php 注册树模式
  8. 【会议记录】软件工程课程设计第一次会议
  9. 带经纬度的水印相机_经纬度水印相机怎么设置?
  10. iOS逆向工程开发技巧
  11. IPv4(分类编址)
  12. 系统加速精灵:全面提升CPU性能,让你的系统跑的更快!
  13. 电脑dnf,DNF卡顿如何解决_DNF卡顿如何解决 教你调整电脑参数畅玩游戏_52PKDNF
  14. geoserver osm 导入_OSM导入PostGreSQL数据库 | 学步园
  15. 水果店做生意不好怎么办,水果店生意不好如何做好
  16. 用深度学习做命名实体识别(四)——模型训练
  17. 2020a matlab文件安装密匙在哪下载?
  18. MarkDown发生HTML渲染组件出错的解决方案(更新下载连接2022.10.21)
  19. t-sql 中实现循环处理
  20. 中国医科大学2021年9月《急危重症护理学》作业考核试题

热门文章

  1. 载波监听多路访问CSMA以及CSMA/CD详解
  2. Unity3D基础34.1:打砖块小游戏优化
  3. 利用SQL语言实现数据库的静态完整性
  4. C++结构体,联合体与枚举类
  5. bzoj 1696: [Usaco2007 Feb]Building A New Barn新牛舍
  6. bzoj 1009: [HNOI2008]GT考试(dp+kmp+矩阵快速幂)
  7. bzoj 1432: [ZJOI2009]Function
  8. [Python] set()函数 创建一个无序不重复元素集
  9. shell的简单应用
  10. hdu1247 Hat’s Words