正题

题目链接:https://www.luogu.com.cn/problem/P4001


题目大意

给出一个类似于

的网格图,求起点到终点的最小割。


解题思路

最小割直接跑网络流,然后发现dinicdinicdinic都过不了。(好像加点玄学优化就能过)

然后上点科技,平面图最小割转其补图(对偶图)的最短路

  • 平面图:满足所有边不相交的情况下可以被画在平面上的一张图G(V,E)G(V,E)G(V,E)
  • 对偶图:将一张平面图的各个区域变成一个点,然后平面图上分割两个区域a,ba,ba,b的边在对偶图上就是连接a,ba,ba,b的一条边。

这题显然是平面图,转换成对偶图就是

画的比较丑,将就着看把。

然后感性理解一下发现结论确实成立。

跑dijdijdij就好了

时间复杂度O(nmlog⁡(nm))O(nm\log\ (nm))O(nmlog (nm))


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define mp(x,y) make_pair(x,y)
using namespace std;
const int N=1010*1010*2;
struct node{int to,next,w;
}a[N<<4];
int n,m,s,t,tot,ls[N],f[N];
bool v[N];
priority_queue<pair<int ,int > >q;
int p(int x,int y,int z)
{return ((x-1)*m+y)*2-z;}
void addl(int x,int y,int w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;a[++tot].to=x;a[tot].next=ls[y];ls[y]=tot;a[tot].w=w;return;
}
int dij(){memset(f,0x3f,sizeof(f));f[s]=0;q.push(mp(0,s));while(!q.empty()){int x=q.top().second;q.pop();if(v[x])continue;v[x]=1;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(f[x]+a[i].w<f[y]){f[y]=f[x]+a[i].w;q.push(mp(-f[y],y));}}}return f[t];
}
int main()
{scanf("%d%d",&n,&m);s=p(n-1,m-1,0)+1;t=s+1;for(int i=1;i<=n;i++)for(int j=1;j<m;j++){int x;scanf("%d",&x);if(i==1)addl(s,p(i,j,0),x);else if(i==n)addl(p(i-1,j,1),t,x);else addl(p(i-1,j,1),p(i,j,0),x);}for(int i=1;i<n;i++)for(int j=1;j<=m;j++){int x;scanf("%d",&x);if(j==1)addl(p(i,j,1),t,x);else if(j==m)addl(s,p(i,j-1,0),x);else addl(p(i,j,1),p(i,j-1,0),x);}for(int i=1;i<n;i++)for(int j=1;j<m;j++){int x;scanf("%d",&x);addl(p(i,j,0),p(i,j,1),x);}printf("%d\n",dij());return 0;
}

P4001-[ICPC-Beijing 2006]狼抓兔子【对偶图】相关推荐

  1. 洛谷 P4001 [ICPC-Beijing 2006]狼抓兔子

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

  2. P4001 [ICPC-Beijing 2006]狼抓兔子(ISAP模板题)

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

  3. 洛谷 - P4001 [ICPC-Beijing 2006]狼抓兔子(网格图最大流转换为对偶图最短路)

    题目链接:点击查看 题目大意:给出一张 n * m 的稠密图,求以点 ( 1 , 1 ) 为起点,点 ( n , m ) 为终点的最小割 题目分析:n 和 m 都是 1e3 级别的,最多可能有 1e6 ...

  4. 【洛谷4001】 [ICPC-Beijing 2006]狼抓兔子(最小割)

    传送门 洛谷 Solution 直接跑最小割板子就好了. 代码实现 #include<stdio.h> #include<stdlib.h> #include<strin ...

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

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

  6. 1001: [BeiJing2006]狼抓兔子(对偶图)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 23595  Solved: 5940 Descrip ...

  7. 1001: [BeiJing2006]狼抓兔子

    /**************************************************************Problem: 1001User: whymheLanguage: C+ ...

  8. BZOJ1001 狼抓兔子 终于过了!

    时间来不及了,先贴代码吧!有时间再写. 好苦逼啊,WA了若干次,还有一次RE,一次TLE. 虽然主要运用的算法和资料都由师兄提供了.还是太弱了,太天真了. 首先,数据范围就WA了,RE了,TLE了. ...

  9. P2030 - 【BJOI2006】狼抓兔子

    P2030 - [BJOI2006]狼抓兔子 Description 八中OJ上本题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001  现 ...

最新文章

  1. 一文详解AI模型部署及工业落地方式
  2. python 加速器 numba 示例
  3. mmap映射大于4g的文件_尴尬,win10镜像文件install.wim大于4G,如何将它装进U盘
  4. 函数计算自动化运维实战1 -- 定时任务
  5. 阶乘的精确值大数阶乘
  6. Knockout.Js案例一Introduction
  7. NET问答: 多个 await 和 Task.WaitAll 是等价的吗?
  8. 使用 DotNet CLI 创建自定义的 WPF 项目模板
  9. 《Effective Java》阅读笔记
  10. 阶段3 2.Spring_10.Spring中事务控制_9 spring编程式事务控制1-了解
  11. FS4066耐高压1到4节内置MOS的锂电池充电管理芯片
  12. 图解WinXP局域网共享设置步骤
  13. 前端要点总结1(2021-12)
  14. 网络栈主要结构介绍(socket、sock、sk_buff,etc)
  15. 大林算法,比较基础的,无振铃的改了对象需要手动改一下
  16. GNSS/IMU紧耦合学习笔记之卫星数据处理
  17. 2015.7.14(大盘结束红色,中色连坐4T)
  18. 云计算基础设施总体架构介绍
  19. Python | 如何运行.ipynb文件?如何安装Jupyter notebook?
  20. 液晶屏工艺中的封口抹平和端口丝印

热门文章

  1. 小波变换原理_小波变换的知识,转载的
  2. 被问到了!为什么一定要使用分布式,内行啊
  3. java对象模型是什么_蓝石榴_个人博客_JVM内存结构、Java内存模型、Java对象模型...
  4. jenkins java反序列化_Jenkins “Java 反序列化”过程远程命令执行漏洞
  5. 华为交换机linux版本号,Cisco和华为交换机常用配置命令总结
  6. 闽高校计算机二级c语言模拟器,闽高校计算机二级C语言模拟卷及答案.doc
  7. mysql 碎片率_MySQL数据碎片的整理和分析
  8. python调用libvirt_通过python获取kvm虚拟机的监控信息(基于libvirt API)
  9. w7下如何安装linux双系统,ubuntu安装教程(下): 教你装win7+Ubuntu双系统
  10. 10-4 6-4 查询厂商“D“生产的PC和便携式电脑的平均价格 (10 分)思路+详解+测试用例