原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1001

整理了下之前A的题

平面图可以转化成对偶图,然后(NlogN)的可以求出图的最小割(最大流)

算法合集有具体的讲解,有兴趣的可以在网上搜下或者向我要(QQ30056882)

/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ //By BLADEVIL
var
n, m :longint;
pre, other, len, last :array[..] of longint;
l :longint;
heng, shu, xie :array[..,..] of longint;
tot :longint;
st, fin :longint;
que, d :array[..] of longint;
flag :array[..] of boolean; procedure connect(x,y,z:longint);
begin
inc(l);
pre[l]:=last[x];
last[x]:=l;
other[l]:=y;
len[l]:=z;
end; procedure init;
var
i, j :longint;
min :longint;
begin
read(n,m);
for i:= to n do
for j:= to m- do read(heng[i,j]); for i:= to n- do
for j:= to m do read(shu[i,j]); for i:= to n- do
for j:= to m- do read(xie[i,j]);
min:=maxlongint;
if (n=) or (m=) then
begin
for i:= to n do
for j:= to m do
begin
if heng[i,j]> then if min>heng[i,j] then min:=heng[i,j];
if shu[i,j]> then if min>shu[i,j] then min:=shu[i,j];
if xie[i,j]> then if min>xie[i,j] then min:=xie[i,j];
end;
writeln(min);
halt;
end;
tot:=*(m-)*(n-);
for i:= to tot do
if i mod = then
begin
if ((i mod (*(m-)))>) then
begin
connect(i,i+,shu[i div (*(m-))+,(i mod (*(m-))) div +]);
connect(i+,i,shu[i div (*(m-))+,(i mod (*(m-))) div +]);
end;
if (i-*m+>) then
if ((i mod (*(m-)))>) then
begin
connect(i,i-*m+,heng[i div (*(m-))+,(i mod (*(m-))) div ]);
connect(i-*m+,i,heng[i div (*(m-))+,(i mod (*(m-))) div ]);
end else
begin
connect(i,i-*m+,heng[i div (*(m-)),m-]);
connect(i-*m+,i,heng[i div (*(m-)),m-]);
end;
end else
begin
connect(i,i+,xie[i div (*(m-))+,((i mod (*(m-)))+) div ]);
connect(i+,i,xie[i div (*(m-))+,((i mod (*(m-)))+) div ]);
end;
st:=tot+; fin:=tot+;
for i:= to (m-) do
begin
connect(st,i*,heng[,i]);
connect(i*,st,heng[,i]);
end;
for i:= to (n-) do
begin
connect(st,i**(m-),shu[i,m]);
connect(i**(m-),st,shu[i,m]);
end;
connect(st,*(m-),shu[,m]);
connect(st,*(m-),heng[,m-]);
connect(*(m-),st,shu[,m]);
connect(*(m-),st,heng[,m-]);
for i:= to (m-) do
begin
connect((n-)**(m-)+*i-,fin,heng[n,i]);
connect(fin,(n-)**(m-)+*i-,heng[n,i]);
end;
for i:= to (n-) do
begin
connect(fin,(i-)**(m-)+,shu[i,]);
connect((i-)**(m-)+,fin,shu[i,]);
end;
connect(fin,(n-)**(m-)+,shu[(n-),]);
connect(fin,(n-)**(m-)+,heng[n,]);
connect((n-)**(m-)+,fin,shu[(n-),]);
connect((n-)**(m-)+,fin,heng[n,]);
end; procedure main;
var
i, j :longint;
h, t :longint;
cur :longint;
q, p :longint; begin
que[]:=st;
filldword(d,sizeof(d) div ,maxlongint div );
d[st]:=;
t:=; h:=;
while h<>t do
begin
h:=h mod +;
cur:=que[h];
flag[cur]:=false;
q:=last[cur];
while q<> do
begin
p:=other[q];
if d[cur]+len[q]<d[p] then
begin
d[p]:=d[cur]+len[q];
if not flag[cur] then
begin
t:=t mod +;
que[t]:=p;
flag[p]:=true;
end;
end;
q:=pre[q];
end;
end;
writeln(d[fin]);
end; begin
///assign(input,'stop.in'); reset(input);
///assign(output,'stop.out'); rewrite(output);
init;
main;
///close(output); close(output);
end.

bzoj 1001 平面图转对偶图 最短路求图最小割的更多相关文章

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

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

  2. hdu 5294 Tricks Device 最短路建图+最小割

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Tricks Device Time Limit: 2000/1000 MS (Java/Other ...

  3. BZOJ 1001 平面图转对偶图

    原图的面转成点,原图的边依旧边,只是连接的是两个面. 对偶图的点数=原图的面数 对偶图的边数=原图的边数(如果原边只属于一个面,则它为环边) #include<bits/stdc++.h> ...

  4. 【BZOJ-2007】海拔 最小割 (平面图转对偶图 + 最短路)

    2007: [Noi2010]海拔 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2095  Solved: 1002[Submit][Status] ...

  5. poj 2914(stoer_wanger算法求全局最小割)

    题目链接:http://poj.org/problem?id=2914 思路:算法基于这样一个定理:对于任意s, t   V ∈ ,全局最小割或者等于原图的s-t 最小割,或者等于将原图进行 Cont ...

  6. 【bzoj1001】【最短路】【对偶图】【最大流转最小割】狼抓兔子题解

    [BZOJ1001]狼抓兔子 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 18872  Solved ...

  7. [BZOJ 1006] [HNOI2008] 神奇的国度 【弦图最小染色】

    题目链接: BZOJ - 1006 题目分析 这道题是一个弦图最小染色数的裸的模型. 弦图的最小染色求法,先求出弦图的完美消除序列(MCS算法),再按照完美消除序列,从后向前倒着,给每个点染能染的最小 ...

  8. bzoj1266 [AHOI2006]上学路线route floyd建出最短路图+最小割

    1266: [AHOI2006]上学路线route Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 2490  Solved: 898[Submit][S ...

  9. HDOJ 5294 Tricks Device 最短路(记录路径)+最小割

    最短路记录路径,同一时候求出最短的路径上最少要有多少条边, 然后用在最短路上的边又一次构图后求最小割. Tricks Device Time Limit: 2000/1000 MS (Java/Oth ...

随机推荐

  1. Spring.Net在ASP.NET Mvc里使用的一个小例子

    就贴个小例子,就不注意格式了. 1.下载dll NuGet的下载地址:http://docs.nuget.org/docs/start-here/installing-nuget 在vs的NuGet里 ...

  2. 从webview中加载assets中的html文件

    private void readHtmlFormAssets(){ WebSettings webSettings = tipsWebView.getSettings(); webSettings. ...

  3. 给移动硬盘安装rhel7

    本机是win8.1的系统,但不想给电脑装双系统,所以想给移动硬盘里安装rhel7移动硬盘是750G的在网上搜了很多方法,我采取了两个方法:方法一.1.取一个U盘,用软碟通把rhel7的iso文件写进了 ...

  4. LeetCode 206——反转链表

    对单链表进行反转有迭代法和递归法两种. 1. 迭代法 迭代法从前往后遍历链表,定义三个指针分别指向相邻的三个结点,反转前两个结点,即让第二个结点指向第一个结点.然后依次往后移动指针,直到第二个结点为空 ...

  5. Queue模块初识

    Queue模块实现了多生产者.多消费者队列.它特别适用于信息必须在多个线程间安全地交换的多线程程序中.这个模块中的Queue类实现了所有必须的锁语义.它依赖于Python中线程支持的可用性:参见thr ...

  6. AMR无限增发代币至任意以太坊地址的漏洞利用及修复过程

    AMR无限增发代币至任意以太坊地址的漏洞利用及修复过程 0x00 项目简述 Ammbr主要目标是打造具有高度弹性且易于连接的分布式宽带接入平台,同时降低上网相关成本.Ammbr打算创建具有人工智能和智 ...

  7. C# Lambda表达式使用累加器例子

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Lamb ...

  8. [转] UnityVS(Visual Studio Tools For Unity)的安装与使用

    一些废话 Unity 的开发者们,尤其是微软系的Unity开发者们,用Mono是不是烦死了?你是不是跟我一样,用vs来写代码,用Mono来跟踪调试?好麻烦啊好麻烦. 也许你会说,傻逼你不会用Unity ...

  9. 【bzoj1999】[Noip2007]Core树网的核 树的直径+双指针法+单调队列

    题目描述 给出一棵树,定义一个点到一条路径的距离为这个点到这条路径上所有点的距离的最小值.求一条长度不超过s的路径,使得所有点到这条路径的距离的最大值最小. 输入 包含n行: 第1行,两个正整数n和s ...

  10. P1886 滑动窗口

    题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...