[日常摸鱼]bzoj1001狼抓兔子-最大流最小割
题意就是求最小割…
然后我们有这么一个定理(最大流-最小割定理 ):
任何一个网络图的最小割中边的容量之和等于图的最大流。
(下面直接简称为最大流和最小割)
证明:
如果最大流>最小割,那把这些割边删去之后依然能找到一条增广路使得源点和汇点联通,和这些边是最小割矛盾。故最大流$\leq$最小割。
而如果最大流<最小割,可是这样通过这些割边还能有更大的流,和最大流矛盾。
综上,最大流=最小割~
然后看看这道题…哇$n\leq 1000$,百万个点百万条边…好吧Dinic其实跑得过…而且还蛮快的…
(我怀疑正解应该是平面图最小割转对偶图最短路?毕竟dinic的理论复杂度好像不太行…)
#include<cstdio>
#define rep(i,a) for(register int i=1;i<=a;++i)
#define debug(x) printf("%s = %d ",#x,x)
const int N=1000005;
const int M=1000005;
const int INF=(~0u>>1);
struct edge
{
int to,nxt,w;
edge(int to=0,int nxt=0,int w=0):to(to),nxt(nxt),w(w){}
}edges[N*10];
int n,m,cnt,st,ed,s,t,ans;
int head[N*10],d[N],q[N];
inline int min(int a,int b){return a<b?a:b;}
inline void addEdge(int u,int v,int w)
{
edges[++cnt]=edge(v,head[u],w);head[u]=cnt;
edges[++cnt]=edge(u,head[v],w);head[v]=cnt;
}
#define cur edges[i].to
inline bool bfs()
{
rep(i,t)d[i]=0;d[s]=1;
st=ed=0;q[st++]=s;
while(ed<st)
{
int k=q[ed++];
for(register int i=head[k];i;i=edges[i].nxt)if(edges[i].w&&!d[cur])
{
d[cur]=d[k]+1;q[st++]=cur;
if(cur==t)return 1;
}
}
return 0;
}
inline int dinic(int x,int f)
{
if(x==t)return f;
int res=f;
for(register int i=head[x];i&&res;i=edges[i].nxt)if(edges[i].w&&d[cur]==d[x]+1)
{
int k=dinic(cur,min(res,edges[i].w));
if(!k)d[cur]=0;
edges[i].w-=k;edges[i^1].w+=k;res-=k;
}
return f-res;
} #undef cur
inline int get_num(int i,int j)
{
return (i-1)*m+j;
}
int main()
{
scanf("%d%d",&n,&m);cnt=1;s=get_num(1,1);t=get_num(n,m);
int x;
rep(i,n)rep(j,m-1){scanf("%d",&x);addEdge(get_num(i,j),get_num(i,j+1),x);}
rep(i,n-1)rep(j,m){scanf("%d",&x);addEdge(get_num(i,j),get_num(i+1,j),x);}
rep(i,n-1)rep(j,m-1){scanf("%d",&x);addEdge(get_num(i,j),get_num(i+1,j+1),x);}
int flow;
while(bfs())while((flow=dinic(s,INF)))ans+=flow;
printf("%d",ans);
return 0;
}
[日常摸鱼]bzoj1001狼抓兔子-最大流最小割的更多相关文章
- [BJOI2006][bzoj1001] 狼抓兔子 [最小割]
题面: 传送门 思路: 其实就是一道最小割的题目...... 我的写法加了两个优化,常数比较小,所以过掉了 一个是当前弧,一个是若当前点并不能流出去,那么标记dep为-1 听说正解是对偶图最短路?可以 ...
- [bzoj1001]狼抓兔子 最小割
题意概述:给出一张无向图,每条边有一个权值,割掉这条边代价为它的权值,求使起点不能到达终点的最小代价. 显然能看出这是个最小割嘛,然后最小割=最大流,建图的时候特殊处理一下再跑个最大流就好了. #in ...
- bzoj1001狼抓兔子 对偶图优化
bzoj1001狼抓兔子 对偶图优化 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路 菜鸡总是要填坑的! 很明显让你求网格图的最 ...
- bzoj1001: [BeiJing2006]狼抓兔子 -- 最小割
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Description 现在小朋友们最喜欢的"喜羊羊与灰太狼 ...
- BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 19528 Solved: 4818[Submit][ ...
- BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...
- bzoj1001狼抓兔子
1001: [BeiJing2006]狼抓兔子 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你 ...
- BZOJ1001:狼抓兔子(最小割最大流+vector模板)
1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨, ...
- BZOJ 1001 狼抓兔子 (最小割转化成最短路)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 27715 Solved: 7134[Submit][ ...
随机推荐
- DDBNet:Anchor-free新训练方法,边粒度IoU计算以及更准确的正负样本 | ECCV 2020
论文针对当前anchor-free目标检测算法的问题提出了DDBNet,该算法对预测框进行更准确地评估,包括正负样本以及IoU的判断.DDBNet的创新点主要在于box分解和重组模块(D&R) ...
- java开发两年了,连个java代理模式都摸不透,你怎么跳槽涨薪?
前言 代理模式(Proxy Pattern),23种java常用设计模式之一.代理模式的定义:代理类对被代理对象提供一种代理以控制对这个对象的访问.代理类主要负责为委托类预处理消息.过滤消息.把消息转 ...
- 用MathType怎么把分数打出来
分数是生活中最常见的数,作为大学生学习高数概率论更是离不开分数.分数是指整体的一部分,或更一般地,任何数量相等的部分.分数是一个整数a和一个正整数b的不等于整数的比. 当在日常用语中说话时,分数描述了 ...
- Linux没有netstat和ifconfig命令问题
安装了精简版命令行centos7系统,运行netsta查看端口和ifconfig查看IP命令都提示找不到命令. 解决方法: yum search ifconfig 通过yum search 这个命令我 ...
- json套娃其实是这样套的!
- 创建topic
sh kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic ...
- CentOS升级参考
CentOS生产系统升级策略: 1)升级前评估 a)确认kernel或包bug. b)用评估工具 c) 测试验证 2)确认升级内容 a)单独升级kernel b)单独升级包 c)都升级 4)确认升级方 ...
- Beta冲刺随笔——Day_One
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 今日事今日毕 林涛: ...
- Django----Serializer序列化
serializer的两大特征 1.校检数据 2.序列化 首先创建apps/Serializer.py 在序列化里面导包 from rest_framework import serializers ...
- python核心高级学习总结8------动态性、__slots__、生成器、迭代器、装饰、闭包
python的动态性 什么是动态性呢,简单地来说就是可以在运行时可以改变其结构,如:新的函数.对象.代码都可以被引进或者修改,除了Python外,还有Ruby.PHP.javascript等也是动态语 ...