BZOJ 1001 平面图转对偶图
原图的面转成点,原图的边依旧边,只是连接的是两个面.
对偶图的点数=原图的面数 对偶图的边数=原图的边数(如果原边只属于一个面,则它为环边)
#include<bits/stdc++.h> using namespace std; const int MAXN = 2500005, MAXM = 3500005; int mindist[MAXN]; bool vis[MAXN]; int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], ed = 1; int cost[MAXM << 1]; inline void addedge(int u, int v, int c) {to[++ed] = v;nxt[ed] = Head[u];cost[ed] = c;Head[u] = ed;to[++ed] = u;nxt[ed] = Head[v];cost[ed] = c;Head[v] = ed; } inline void read(int &v) {v = 0;char c = 0;int p = 1;while (c < '0' || c > '9') {if (c == '-') {p = -1;}c = getchar();}while (c >= '0' && c <= '9') {v = (v << 3) + (v << 1) + c - '0';c = getchar();}v *= p; } struct HeapNode {int d, u;bool operator < (const HeapNode& rhs) const {return d > rhs.d;} } zz; priority_queue<HeapNode> que; void Hijkstra(int s) {mindist[s] = 0;memset(vis, 0, sizeof(vis));zz.d = 0, zz.u = s;que.push(zz);while (!que.empty()) {HeapNode x = que.top();que.pop();int u = x.u;if (vis[u] || mindist[u] != x.d) {continue;}vis[u] = true;for (int v, i = Head[u]; i; i = nxt[i]) {v = to[i];if (mindist[v] > mindist[u] + cost[i]) {mindist[v] = mindist[u] + cost[i];//p[v]=u;zz.d = mindist[v], zz.u = v;que.push(zz);}}} } int n, m; int getnum(int x, int y, int add) {return (x - 1) * (m - 1) * 2 + (y - 1) * 2 + add; } int main() {int u, v, c;read(n), read(m);int sum = (n - 1) * (m - 1) * 2 + 2;if (n == 1 || m == 1) {int ans = INT_MAX;if (n == 1) {for (int i = 1; i < m; i++) {read(c);ans = min(ans, c);}} else {for (int i = 1; i < n; i++) {read(c);ans = min(ans, c);}}printf("%d\n", ans);return 0;}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m - 1; j++) {read(c);if (i == 1) {addedge(sum, getnum(i, j, 1), c);} else if (i == n) {addedge(sum - 1, getnum(i - 1, j, 0), c);} else {addedge(getnum(i, j, 1), getnum(i - 1, j, 0), c);}}}for (int i = 1; i <= n - 1; i++) {for (int j = 1; j <= m; j++) {read(c);if (j == 1) {addedge(sum - 1, getnum(i, j, 0), c);} else if (j == m) {addedge(sum, getnum(i, j - 1, 1), c);} else {addedge(getnum(i, j, 0), getnum(i, j - 1, 1), c);}}}for (int i = 1; i <= n - 1; i++) {for (int j = 1; j <= m - 1; j++) {read(c);addedge(getnum(i, j, 0), getnum(i, j, 1), c);}}for (int i = 0; i <= sum + 1; i++) {mindist[i] = 1e9;}Hijkstra(sum - 1);printf("%d\n", mindist[sum]); }
View Code
转载于:https://www.cnblogs.com/Aragaki/p/10026968.html
BZOJ 1001 平面图转对偶图相关推荐
- S-T平面图中利用最短路求最小割(BZOJ 1001)
BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...
- BZOJ 1001 狼捉兔子
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ...
- 【BZOJ1001】狼抓兔子,平面图转对偶图(从最小割到最短路)
Time:2016.08.18 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 显然这个题是求这个图的最小割 在这个n*m个点,2*(n*(m-1)+(n-1)m+(n-1)(m-1 ...
- BZOJ:1001狼抓兔子
简直了非常迷 看到题目毫不犹豫的写了一个网络流,然后果真就TLE了 翻了一下题解,就是最大流最小割定理然后,然后将平面图变成对偶图,相当于是从起点到终点跑一个最短路就可以了 神马居然还有这种操作??! ...
- bzoj 1001狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 15622 Solved: 3771 [ Sub ...
- 狼抓兔子(平面图转对偶图)
狼抓兔子(平面图转对偶图) 面对下面这样一个网格的地形: 道路上的权值表示这条路上最多能够通过的兔子数,道路是无向的. 左上角和右下角为兔子的两个窝,开始时所有的兔子都聚集在左上角(1,1)的窝里,现 ...
- 平面图转对偶图19_03_21校内训练 [Everfeel]
对于每个平面图,都有唯一一个对偶图与之对应.若G'是平面图G的对偶图,则满足: G'中每一条边的两个节点对应着G中有公共边的面,包括最外部无限大的面. 直观地讲,红色标出来的图就是蓝色标出的图的对偶图 ...
- 图论 —— 网络流 —— 最小割 —— 平面图与对偶图
[平面图] 对于一个图 G=(V,E),若其重画后,在平面任意两条边的交点除了图中点外,没有其他交点,那么这个图称为平面图 在平面图中,由边包围并且其中不含顶点的区域称为面 包围面 R 的所有边组成的 ...
- 图论(十三)——平面图和对偶图
一.平面图概念 \quad如果能把图G画在平面上,使得除顶点外,边与边之间没有交叉,称G可以嵌入平面,或称G是可平面图.可平面图G的边不交叉的一种画法,称为G的一种平面嵌入,G的平面嵌入表示的图称为平 ...
- 关于平面图到对偶图的转化
闲话 哇对偶图真的是个好东西, 昨天考NOI2010的时候前两道很快做完了, 看着t3发呆了1个多小时, 啥也想不出来. 看着网格图突然想到听说bzoj1001狼抓兔子可以用对偶图求解. 对偶图是啥我 ...
最新文章
- windows Azure
- 微信小程序API·目录
- 推荐一些好的linux学习网站
- 判断触发器正在处理的是插入,删除还是更新触发
- shell swt 样式_swt shell设置窗口位于屏幕中间
- ASP.NET Core端点路由 作用原理
- 程序员怎样锻炼编程思维(学习方法)
- java游戏暂停弹出字体_小白写了个java的小游戏 想加个暂停的功能 无从下手 求大佬们帮...
- dll domodal运行时异常_解决装备疑难,计算机丢失***.dll文件方法「设计画圈」
- 解决安装youtubedownloader的流氓插件“雅虎助手”造成浏览器首页劫持的事件
- java opencv 模板匹配算法_opencv 模板匹配
- ResNet 残差网络
- ZC公司员工评分系统——前台排版算法
- 用什么擦地最干净脑筋急转弯_100个脑筋急转弯,很多人困在了第8题,赶快考考孩子吧...
- 简约黑板擦特效表白网源码 附带wap自适应
- Django mako 的使用(七)
- [高通MSM8953][Android10]user版本背光亮度无法调节
- 计算机设备类型分类,计算机外围设备的分类,都有哪些设备
- 喜剧演员泽连斯基到底靠什么,能够从喜剧演员一路走到总统?
- linux里用dnf安装软件,Linux 软件包管理器 DNF 的使用方法