原图的面转成点,原图的边依旧边,只是连接的是两个面.

对偶图的点数=原图的面数 对偶图的边数=原图的边数(如果原边只属于一个面,则它为环边)

#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 平面图转对偶图相关推荐

  1. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

  2. BZOJ 1001 狼捉兔子

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ...

  3. 【BZOJ1001】狼抓兔子,平面图转对偶图(从最小割到最短路)

    Time:2016.08.18 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 显然这个题是求这个图的最小割 在这个n*m个点,2*(n*(m-1)+(n-1)m+(n-1)(m-1 ...

  4. BZOJ:1001狼抓兔子

    简直了非常迷 看到题目毫不犹豫的写了一个网络流,然后果真就TLE了 翻了一下题解,就是最大流最小割定理然后,然后将平面图变成对偶图,相当于是从起点到终点跑一个最短路就可以了 神马居然还有这种操作??! ...

  5. bzoj 1001狼抓兔子

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec   Memory Limit: 162 MB Submit: 15622   Solved: 3771 [ Sub ...

  6. 狼抓兔子(平面图转对偶图)

    狼抓兔子(平面图转对偶图) 面对下面这样一个网格的地形: 道路上的权值表示这条路上最多能够通过的兔子数,道路是无向的. 左上角和右下角为兔子的两个窝,开始时所有的兔子都聚集在左上角(1,1)的窝里,现 ...

  7. 平面图转对偶图19_03_21校内训练 [Everfeel]

    对于每个平面图,都有唯一一个对偶图与之对应.若G'是平面图G的对偶图,则满足: G'中每一条边的两个节点对应着G中有公共边的面,包括最外部无限大的面. 直观地讲,红色标出来的图就是蓝色标出的图的对偶图 ...

  8. 图论 —— 网络流 —— 最小割 —— 平面图与对偶图

    [平面图] 对于一个图 G=(V,E),若其重画后,在平面任意两条边的交点除了图中点外,没有其他交点,那么这个图称为平面图 在平面图中,由边包围并且其中不含顶点的区域称为面 包围面 R 的所有边组成的 ...

  9. 图论(十三)——平面图和对偶图

    一.平面图概念 \quad如果能把图G画在平面上,使得除顶点外,边与边之间没有交叉,称G可以嵌入平面,或称G是可平面图.可平面图G的边不交叉的一种画法,称为G的一种平面嵌入,G的平面嵌入表示的图称为平 ...

  10. 关于平面图到对偶图的转化

    闲话 哇对偶图真的是个好东西, 昨天考NOI2010的时候前两道很快做完了, 看着t3发呆了1个多小时, 啥也想不出来. 看着网格图突然想到听说bzoj1001狼抓兔子可以用对偶图求解. 对偶图是啥我 ...

最新文章

  1. windows Azure
  2. 微信小程序API·目录
  3. 推荐一些好的linux学习网站
  4. 判断触发器正在处理的是插入,删除还是更新触发
  5. shell swt 样式_swt shell设置窗口位于屏幕中间
  6. ASP.NET Core端点路由 作用原理
  7. 程序员怎样锻炼编程思维(学习方法)
  8. java游戏暂停弹出字体_小白写了个java的小游戏 想加个暂停的功能 无从下手 求大佬们帮...
  9. dll domodal运行时异常_解决装备疑难,计算机丢失***.dll文件方法「设计画圈」
  10. 解决安装youtubedownloader的流氓插件“雅虎助手”造成浏览器首页劫持的事件
  11. java opencv 模板匹配算法_opencv 模板匹配
  12. ResNet 残差网络
  13. ZC公司员工评分系统——前台排版算法
  14. 用什么擦地最干净脑筋急转弯_100个脑筋急转弯,很多人困在了第8题,赶快考考孩子吧...
  15. 简约黑板擦特效表白网源码 附带wap自适应
  16. Django mako 的使用(七)
  17. [高通MSM8953][Android10]user版本背光亮度无法调节
  18. 计算机设备类型分类,计算机外围设备的分类,都有哪些设备
  19. 喜剧演员泽连斯基到底靠什么,能够从喜剧演员一路走到总统?
  20. linux里用dnf安装软件,Linux 软件包管理器 DNF 的使用方法

热门文章

  1. Android开发之自定义UI组件和属性
  2. 2018-2019-1 20189218《Linux内核原理与分析》第二周作业
  3. Google App Engine CMS系统的搭建
  4. Jpcap包的安装与配置
  5. 使用二维数组遇到的问题
  6. Windows Server 2008 R2的教程36篇!
  7. ITSM在金融行业的应用
  8. 深度学习:NLP之词嵌入(Word Embedding)
  9. BZOJ1185[HNOI2007] 最小矩形覆盖
  10. 前端性能优化(慕课网笔记)-3-代码优化