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

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

#include<bits/stdc++.h>
using namespace std;
const int MAXN = , MAXM = ;
int mindist[MAXN];
bool vis[MAXN];
int to[MAXM << ], nxt[MAXM << ], Head[MAXN], ed = ;
int cost[MAXM << ];
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 = ;
char c = ;
int p = ;
while (c < '' || c > '') {
if (c == '-') {
p = -;
}
c = getchar();
}
while (c >= '' && c <= '') {
v = (v << ) + (v << ) + c - '';
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] = ;
memset(vis, , sizeof(vis));
zz.d = , 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 - ) * (m - ) * + (y - ) * + add;
}
int main() {
int u, v, c;
read(n), read(m);
int sum = (n - ) * (m - ) * + ;
if (n == || m == ) {
int ans = INT_MAX;
if (n == ) {
for (int i = ; i < m; i++) {
read(c);
ans = min(ans, c);
}
} else {
for (int i = ; i < n; i++) {
read(c);
ans = min(ans, c);
}
}
printf("%d\n", ans);
return ;
}
for (int i = ; i <= n; i++) {
for (int j = ; j <= m - ; j++) {
read(c);
if (i == ) {
addedge(sum, getnum(i, j, ), c);
} else if (i == n) {
addedge(sum - , getnum(i - , j, ), c);
} else {
addedge(getnum(i, j, ), getnum(i - , j, ), c);
}
}
}
for (int i = ; i <= n - ; i++) {
for (int j = ; j <= m; j++) {
read(c);
if (j == ) {
addedge(sum - , getnum(i, j, ), c);
} else if (j == m) {
addedge(sum, getnum(i, j - , ), c);
} else {
addedge(getnum(i, j, ), getnum(i, j - , ), c);
}
}
}
for (int i = ; i <= n - ; i++) {
for (int j = ; j <= m - ; j++) {
read(c);
addedge(getnum(i, j, ), getnum(i, j, ), c);
}
}
for (int i = ; i <= sum + ; i++) {
mindist[i] = 1e9;
}
Hijkstra(sum - );
printf("%d\n", mindist[sum]);
}

BZOJ 1001 平面图转对偶图的更多相关文章

  1. bzoj 1001 平面图转对偶图 最短路求图最小割

    原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1001 整理了下之前A的题 平面图可以转化成对偶图,然后(NlogN)的可以求出图的最小割( ...

  2. BZOJ 1001 平面图与对偶图的转化 最短路Or最大流

    思路: 1.按照题意求最小割 转换成最大流用Dinic解 2. 转换成对偶图 求最短路 Dinic: //By SiriusRen #include <queue> #include &l ...

  3. BZOJ 1001 [BeiJing2006] 狼抓兔子(平面图最大流)

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

  4. s - t 平面图最大流 (附例题 bzoj 1001)

    以下均移自 周冬的<两极相通-浅析最大最小定理在信息学竞赛中的应用> 平面图性质 1.(欧拉公式)如果一个连通的平面图有n个点,m条边和f个面,那么f=m-n+2 2.每个平面图G都有一个 ...

  5. 【BZOJ 2007】 2007: [Noi2010]海拔 (平面图转对偶图+spfa)

    2007: [Noi2010]海拔 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2504  Solved: 1195 Description YT市 ...

  6. 【BZOJ】2007: [Noi2010]海拔(平面图转对偶图)

    题目 传送门:QWQ 分析 左上角是0,右下角是1.那么大概整张图是由0 1构成的. 那么我们要找到0和1的分界线,值就是最小割. 然后变成求原图最小割. 考虑到此题是平面图,那么就转成对偶图跑最短路 ...

  7. bzoj 1001 狼抓兔子 —— 平面图最小割(最短路)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 平面图最小割可以转化成最短路问题: 建图时看清楚题目的 input ... 代码如下: ...

  8. BZOJ 4541: [Hnoi2016]矿区 平面图转对偶图+DFS树

    4541: [Hnoi2016]矿区 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 433  Solved: 182[Submit][Status][ ...

  9. BZOJ 4423: [AMPPZ2013]Bytehattan 并查集+平面图转对偶图

    4423: [AMPPZ2013]Bytehattan Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 277  Solved: 183 [Submit ...

随机推荐

  1. ETH挖矿

    转载声明:http://www.120btc.com/baike/coin/1021.html (仅为了方便自己及原文章被删除) 最近以太坊大涨市值成为仅次比特币的第二大数字货币,那么以太坊(ETH) ...

  2. curl and wget

    写在前面: a.  对比curl 和 wget 的相同和不同点 来记忆 a-1 curl url  直接将请求内容输出到标准输出. 如果下载不是瞬时间完成,会显示下载进度条,如果向取消,加-s : w ...

  3. Sql 备忘——行号

    SELECT row_number() over(order by Product.ID) as [row_number]

  4. *【Python】【demo实验26】【练习实例】【递归方法的使用】

    原题: 利用递归方法求5! 原题给出的解答: #!/usr/bin/python # encoding=utf-8 # -*- coding: UTF-8 -*- # 利用递归方法求5! def fa ...

  5. memcached命令行、Memcached数据导出和导入

    1.memcached命令行 telnet 127.0.0.1 11211set key2 0 30 2abSTOREDget key2VALUE key2 0 2abEND  如: set key3 ...

  6. pip安装源

    目录 介绍 永久配置安装源 Windows MacOS.Linux 配置文件内容 介绍 """ 1.采用国内源,加速下载模块的速度 2.常用pip源: -- 豆瓣:htt ...

  7. go intall的使用

    1.首先GOPATH路径指向src的上级目录 2.设置GOBIN路径指向bin目录 3.查看环境配置 4.go install 在src目录下 5.完成 6.pkg ide编译运行一下自动生成

  8. C#面向对象21 接口

    接口的规范: 1.接口是一种规范.只要一个类继承了一个接口,这个类就必须实现这个接口中所有的成员. 2.为了多态,接口不能被实例化,接口不new(不能创建对象) 3.接口中的成员不能加“访问修饰符”, ...

  9. ModbusTCP报文详解【一】

    [1]功能码01H [2]功能码02H [3]功能码03H [4]功能码04H

  10. QT获取屏幕分表率(PC、安卓)

    QRect screenRect = QGuiApplication::primaryScreen()->geometry(); double devicePixelRatio = QGuiAp ...