题意就是求最小割…

然后我们有这么一个定理(最大流-最小割定理 )

任何一个网络图的最小割中边的容量之和等于图的最大流。

(下面直接简称为最大流和最小割)

证明:

如果最大流>最小割,那把这些割边删去之后依然能找到一条增广路使得源点和汇点联通,和这些边是最小割矛盾。故最大流$\leq$最小割。

而如果最大流<最小割,可是这样通过这些割边还能有更大的流,和最大流矛盾。

综上,最大流=最小割~

然后看看这道题…哇$n\leq 1000$,百万个点百万条边…好吧Dinic其实跑得过…而且还蛮快的…

(我怀疑正解应该是平面图最小割转对偶图最短路?毕竟dinic的理论复杂度好像不太行…)

  1. #include<cstdio>
  2. #define rep(i,a) for(register int i=1;i<=a;++i)
  3. #define debug(x) printf("%s = %d ",#x,x)
  4. const int N=1000005;
  5. const int M=1000005;
  6. const int INF=(~0u>>1);
  7. struct edge
  8. {
  9. int to,nxt,w;
  10. edge(int to=0,int nxt=0,int w=0):to(to),nxt(nxt),w(w){}
  11. }edges[N*10];
  12. int n,m,cnt,st,ed,s,t,ans;
  13. int head[N*10],d[N],q[N];
  14. inline int min(int a,int b){return a<b?a:b;}
  15. inline void addEdge(int u,int v,int w)
  16. {
  17. edges[++cnt]=edge(v,head[u],w);head[u]=cnt;
  18. edges[++cnt]=edge(u,head[v],w);head[v]=cnt;
  19. }
  20. #define cur edges[i].to
  21. inline bool bfs()
  22. {
  23. rep(i,t)d[i]=0;d[s]=1;
  24. st=ed=0;q[st++]=s;
  25. while(ed<st)
  26. {
  27. int k=q[ed++];
  28. for(register int i=head[k];i;i=edges[i].nxt)if(edges[i].w&&!d[cur])
  29. {
  30. d[cur]=d[k]+1;q[st++]=cur;
  31. if(cur==t)return 1;
  32. }
  33. }
  34. return 0;
  35. }
  36. inline int dinic(int x,int f)
  37. {
  38. if(x==t)return f;
  39. int res=f;
  40. for(register int i=head[x];i&&res;i=edges[i].nxt)if(edges[i].w&&d[cur]==d[x]+1)
  41. {
  42. int k=dinic(cur,min(res,edges[i].w));
  43. if(!k)d[cur]=0;
  44. edges[i].w-=k;edges[i^1].w+=k;res-=k;
  45. }
  46. return f-res;
  47. }
  48.  
  49. #undef cur
  50. inline int get_num(int i,int j)
  51. {
  52. return (i-1)*m+j;
  53. }
  54. int main()
  55. {
  56. scanf("%d%d",&n,&m);cnt=1;s=get_num(1,1);t=get_num(n,m);
  57. int x;
  58. rep(i,n)rep(j,m-1){scanf("%d",&x);addEdge(get_num(i,j),get_num(i,j+1),x);}
  59. rep(i,n-1)rep(j,m){scanf("%d",&x);addEdge(get_num(i,j),get_num(i+1,j),x);}
  60. rep(i,n-1)rep(j,m-1){scanf("%d",&x);addEdge(get_num(i,j),get_num(i+1,j+1),x);}
  61. int flow;
  62. while(bfs())while((flow=dinic(s,INF)))ans+=flow;
  63. printf("%d",ans);
  64. return 0;
  65. }

[日常摸鱼]bzoj1001狼抓兔子-最大流最小割的更多相关文章

  1. [BJOI2006][bzoj1001] 狼抓兔子 [最小割]

    题面: 传送门 思路: 其实就是一道最小割的题目...... 我的写法加了两个优化,常数比较小,所以过掉了 一个是当前弧,一个是若当前点并不能流出去,那么标记dep为-1 听说正解是对偶图最短路?可以 ...

  2. [bzoj1001]狼抓兔子 最小割

    题意概述:给出一张无向图,每条边有一个权值,割掉这条边代价为它的权值,求使起点不能到达终点的最小代价. 显然能看出这是个最小割嘛,然后最小割=最大流,建图的时候特殊处理一下再跑个最大流就好了. #in ...

  3. bzoj1001狼抓兔子 对偶图优化

    bzoj1001狼抓兔子 对偶图优化 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路 菜鸡总是要填坑的! 很明显让你求网格图的最 ...

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

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

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

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

  6. BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...

  7. bzoj1001狼抓兔子

    1001: [BeiJing2006]狼抓兔子 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你 ...

  8. BZOJ1001:狼抓兔子(最小割最大流+vector模板)

    1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨, ...

  9. BZOJ 1001 狼抓兔子 (最小割转化成最短路)

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

随机推荐

  1. 怎么用MindManager制作议论文思维导图

    大家都写过作文吧,做小学到高考到大学,这是谁也摆脱不了的,但是大家写作文会提前把自己的思路整理出来吗?让自己行文更为顺畅,作文更为流利吗?特别是关于议论文,一直是高考写作的一个重点篇目,写好议论文,就 ...

  2. Word文档数据被误删了怎么办,还能恢复吗

    很多时候由于时间紧张或者是思路不想被打断,我们在编辑Word时不能及时的手动保存,一旦遇到电脑意外断电的情况可能就会导致编辑好的Word文档内容丢失.或者是文档编辑好了之后,Word提示是否保存时,误 ...

  3. 痞子衡嵌入式:在IAR开发环境下为工程开启CRC完整性校验功能的方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下为工程开启CRC完整性校验功能的方法. CRC校验在嵌入式领域里的应用非常广,比如在通信领域,CRC检验值可以作为数据 ...

  4. python+requests之接口测试

    最近学习接口测试,测试工具玩的差不多了,想用代码来尝试一下. 发现一个简单的库,requests 一:安装 pip install requests 二:使用 import requests url ...

  5. Mybatis【2】-- 多个mapper文件以及namespace作用

    多个mapper文件以及namespace作用 要是多个mapper文件的时候怎么处理,namespace又是干什么用的呢 首先我们来看创建数据库语句: #创建数据库 CREATE DATABASE ...

  6. CBV装饰校验的三种方式session

    代码如下: from django.shortcuts import render,HttpResponse,redirect from django.views import View # Crea ...

  7. MySQL数据库入门学习

    一. 前言 作为一名大二在校生,因为正在学习网页设计,考虑到后台问题,所以便自学了数据库,可能给大家总结的不是很全,但是一些必要的点肯定会讲到.现在市场上有很多图形化的数据库, 二. MySQL基础知 ...

  8. 最新小样本学习综述 A Survey on Few-Shot Learning | 四大模型Multitask Learning、Embedding Learning、External Memory…

    目录 原文链接: 小样本学习与智能前沿 01 Multitask Learning 01.1 Parameter Sharing 01.2 Parameter Tying. 02 Embedding ...

  9. 基于 MongoDB 动态字段设计的探索

    一.业务需求 假设某学校课程系统,不同专业课程不同 (可以动态增删),但是需要根据专业不同显示该专业学生的各科课程的成绩,如下: 专业 姓名 高等数学 数据结构 计算机 张三 90 85 计算机 李四 ...

  10. java简单的实现搜索框的下拉显示相关搜索功能

    最近做了一个简单的搜索框下面下拉显示相关搜索的功能,有点模仿百度的下拉展示相关搜索 先上个展示图 : 点击进入演示地址,大家可以输入长点的搜索,点击搜索,再输入之前搜索词的前面部分,看是否能展示出来 ...