浅析最大最小定理在信息学竞赛中的应用---周东

↑方法介绍
对于一个联通的平面图G(满足欧拉公式) 在s和t间新连一条边e;
然后建立一个原图的对偶图G*,G*中每一个点对应原图中每一个面,每一条边对应分割面的每一条边;
那么对偶图G*中,以原图s和t间边e新划分出的面作为起点(s*),最外的面作为终点(t*);
那么从s*到t*的每一条路都是原图G的一个割;
下图来自上方标出百度文库网址的ppt;
然后用堆(优先队列)优化的迪杰斯特拉,复杂度 O((m+n)logn) n为点数,m为边数...
 
嗯存一个堆优化迪杰斯特拉的代码...很久以前那个没有标签的一通好找..
 #include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define pa pair<int,int>
int n,m,s,t;
struct node{
int y;
int next;
int v;
}e[];
int head[]={},tot=,dis[]={};
bool vis[]={};
priority_queue< pa, vector< pa >, greater< pa > >q;
inline void init(int x,int y,int v){
e[++tot].y=y;
e[tot].next=head[x];
e[tot].v=v;
head[x]=tot;
}
inline int ge(int x,int y,int k){//x行,y列,在斜线的左(1)右(2);返回格子的编号
return *(x-)*(m-)+*(y-)+k;
}
/*
事实上如果按照从上到下从左到右来编号,在输入时的块编号是有规律的;
不一定要像上面一样这样找格子编号;
*/
void doit(){
memset(dis,,sizeof(dis));
int x,y;
dis[s]=;
q.push(make_pair(,s));
while(!q.empty()){
x=q.top().second;
q.pop();
if(vis[x]){
continue;
}
vis[x]=;
for(int i=head[x];i;i=e[i].next){
y=e[i].y;
if(dis[y]>dis[x]+e[i].v){
dis[y]=dis[x]+e[i].v;
vis[y]=;
q.push(make_pair(dis[y],e[i].y));
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
int v;
t=(m-)*(n-)*+;
s=t-;
for(int i=;i<=n;i++){
for(int j=;j<m;j++){
scanf("%d",&v);
if(i==){
init(s,*j,v);
init(*j,s,v);
}else if(i==n){
init(ge(n-,j,),t,v);
init(t,ge(n-,j,),v);
}else{
init(ge(i-,j,),ge(i,j,),v);
init(ge(i,j,),ge(i-,j,),v);
}
}
}
for(int i=;i<n;i++){
for(int j=;j<=m;j++){
scanf("%d",&v);
if(j==){
init(t,ge(i,,),v);
init(ge(i,,),t,v);
}else if(j==m){
init(ge(i,m-,),s,v);
init(s,ge(i,m-,),v);
}else{
init(ge(i,j-,),ge(i,j,),v);
init(ge(i,j,),ge(i,j-,),v);
}
}
}
for(int i=;i<n;i++){
for(int j=;j<m;j++){
scanf("%d",&v);
init(ge(i,j,),ge(i,j,),v);
init(ge(i,j,),ge(i,j,),v);
}
}
doit();
printf("%d\n",dis[t]);
return ;
}

BZOJ1001: [BeiJing2006]狼抓兔子 (最小割转最短路)的更多相关文章

  1. BZOJ1001 [BeiJing2006]狼抓兔子 最小割 对偶图 最短路

    原文链接http://www.cnblogs.com/zhouzhendong/p/8686871.html 题目传送门 - BZOJ1001 题意 长成上面那样的网格图求最小割. $n,m\leq ...

  2. BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 19528  Solved: 4818[Submit][ ...

  3. bzoj1001: [BeiJing2006]狼抓兔子 -- 最小割

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Description 现在小朋友们最喜欢的"喜羊羊与灰太狼 ...

  4. BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流

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

  5. BZOJ1001[BeiJing2006]狼抓兔子——最小割

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

  6. 【bzoj1001】[BeiJing2006]狼抓兔子 最小割+对偶图+最短路

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

  7. [bzoj 1001][Beijing2006]狼抓兔子 (最小割+对偶图+最短路)

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

  8. bzoj 1001 [BeiJing2006]狼抓兔子——最小割转最短路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 #include<cstdio> #include<cstring& ...

  9. BZOJ 1001: [BeiJing2006]狼抓兔子 最小割

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓 ...

随机推荐

  1. composer 上提交自己的包

    先在github上复制自己的地址在 https://packagist.org/packages/submit ->check->submit

  2. ES6核心,值得驻足花一天时间来学习

    1.let 和 const 命令 在es5时,只有两种变量声明,var 和function.在es6中新增了四种let和const,以及另外两种声明import和class. 我们先讲解let和con ...

  3. 51Nod 1256 扩展欧几里得求乘法逆元

    给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的. Input 输入2个数M, N中间用 ...

  4. java校验身份证号码

    /** * 18位身份证校验,粗略的校验 * @author lyl * @param idCard * @return */ public static boolean is18ByteIdCard ...

  5. Java多线程学习(七)并发编程中一些问题

    本节思维导图: 关注微信公众号:"Java面试通关手册" 回复"Java多线程"获取思维导图源文件和思维导图软件. 多线程就一定好吗?快吗?? 并发编程的目的就 ...

  6. 64_p5

    php-nette-bootstrap-2.4.3-1.fc26.noarch.rpm 20-Feb-2017 07:19 16290 php-nette-caching-2.5.3-1.fc26.n ...

  7. PHP 不让标准浏览器(firfox,chrome等)走浏览器的缓存页面

    或在HTML页面里加: <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache,no-store, must-reva ...

  8. java 1.8 新特性 stream

    并发提升 java 中Stream类似于hadoop中的数据分析的思路,只不过hadoop大,用的是多台机算机的计算生态,而java  stream使用的单台计算机中的多cpu分析一块数据的过程.通过 ...

  9. UVA题解三

    UVA题解三 UVA 127 题目描述:\(52\)张扑克牌排成一列,如果一张牌的花色或者数字与左边第一列的最上面的牌相同,则将这张牌移到左边第一列的最上面,如果一张牌的花色或者数字与左边第三列的最上 ...

  10. 简约而不简单的Django

    本文面向:有python基础,刚接触web框架的初学者. 环境:windows7   python3.5.1  pycharm专业版  Django 1.10版 pip3 一.Django简介 百度百 ...