BZOJ-1001 (网络流)
来源:互联网 发布:哪些网站可以注册域名 编辑:程序博客网 时间:2024/06/05 18:26
题目
狼爪兔子
http://www.lydsy.com/JudgeOnline/problem.php?id=1001
分析
看起来是求最小割,试试建好图用网络流?
第一次交 TLE 了,试着优化了一下,就过了。(具体见 find() 函数那里)
程序
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define For(x) for(int h=head[x]; h; h=E[h].nxt)#define V (E[h].v)#define R (E[h].cap-E[h].flow)struct Edge{int v,cap,flow,nxt;} E[6000000];int num,n,m,S,T,k,l,r,ans;int head[3000005],dis[3000005],q[3000005];void add(int u,int v){ scanf("%d",&k); E[++num]=(Edge){v,k,0,head[u]}; head[u]=num; E[++num]=(Edge){u,k,0,head[v]}; head[v]=num;}void init(){ scanf("%d%d",&n,&m); S=0,T=n*m-1,num=1; for (int i=0; i<n; i++) for (int j=0; j<m-1; j++) add(i*m+j,i*m+j+1); for (int i=0; i<n-1; i++) for (int j=0; j<m; j++) add(i*m+j,(i+1)*m+j); for (int i=0; i<n-1; i++) for (int j=0; j<m-1; j++) add(i*m+j,(i+1)*m+j+1);}bool bfs(){ memset(dis,0,sizeof(dis)); dis[S]=1; for (q[l=r=0]=S; l<=r; l++){ For(q[l]) if (!dis[V] && R>0){ // V 还没分过层,且 u->v 还有残余流量,说明可用 dis[V]=dis[q[l]]+1; q[++r]=V; } } if (dis[T]) return 1; //还有增广路 return 0;}int find(int x,int low){ if (x==T) return low; int a,tmp=0; //tmp:经过 x 节点,最多能增加的流 For(x) if (dis[V]==dis[x]+1 && R>0){ //一条可行的弧 a=find(V,min(low-tmp,R)); E[h].flow+=a; //正向边 E[h^1].flow-=a; //反向边 tmp+=a; if (low==tmp) return tmp; else dis[V]=-1; //加了这一句,以便在已经满流的情况下不再讨论了。 } return tmp;}void debug(){ for (int i=0; i<n; i++) for (int j=0; j<m; j++){ printf("[%d,%d]\t",i,j); For(i*m+j) printf("{(%d,%d),%d,%d} ",V/m,V%m,E[h].cap,E[h].flow); puts(""); }}int main(){ //freopen("1.txt","r",stdin); init(); //debug(); while (bfs()) //分层操作 ans+=find(S,1000000000); //找出若干增广路径时增加的流最大 printf("%d\n",ans);}
提示
后来看到好像又跟“对偶图”有什么联系,去学一学……
阅读全文
0 0
- BZOJ-1001 (网络流)
- BZOJ 1711 网络流
- BZOJ 1391 网络流
- BZOJ 1711 网络流
- BZOJ 2929 网络流
- BZOJ的网络流
- BZOJ 3275: Number|网络流
- bzoj 3504(神题,网络流)
- BZOJ 1305 二分+网络流
- BZOJ 3931 Dijkstra+网络流
- BZOJ 3130 二分+网络流
- BZOJ 3158: 千钧一发 网络流
- BZOJ 3275: Number 网络流
- [BZOJ 1001][BeiJing2006]狼抓兔子(网络流/SPFA)
- 【BZOJ】 1001 [BeiJing2006]狼抓兔子 网络最大流
- BZOJ 1001 网络流最小割 解题报告
- BZOJ 1001[BeiJing2006]狼抓兔子 (网络流 Dinic)
- 【bzoj 1001】狼抓兔子(网络流)
- 吴恩达 深度学习 CLass2 Week1 总结
- Android Material Design Toolbar笔记1
- 为什么css的box-shadow和border-radius没效果解决方法
- 我的编程学习(转载):如何把远程GIT项目克隆到本地
- ieda使用 在jsp页面中,有时候会出现不能智能显示方法 idea pageContext.setAttribute
- BZOJ-1001 (网络流)
- Java中的ReentrantLock和synchronized两种锁定机制的对比
- 系统目录结构、ls命令 、 文件类型、alias命令
- 光源的类型
- MySql常用SQL语句
- 413. Arithmetic Slices
- 点击标题就可以选中输入框input
- JDBC基本实现原理
- 论SQL语句中的Left join-多表关系