【BZOJ3504】危桥(最大流)
题意:见题面
思路:http://www.cnblogs.com/chenyushuo/p/5139556.html
必须交换b1,b2做第二次最大流的原因:
假如一个a1到b2的一个流和b1到a2的一个流分别经过了一个桥的两个端点(u,v),如图
- var fan:array[..]of longint;
- head,vet,next,gap,len,dis:array[..]of longint;
- a:array[..,..]of char;
- ch:string;
- n,m,i,tot,x1,x2,y1,y2,s1,s2,src,source,s,j:longint;
- flag:boolean;
- function min(x,y:longint):longint;
- begin
- if x<y then exit(x);
- exit(y);
- end;
- procedure add(a,b,c:longint);
- begin
- inc(tot);
- next[tot]:=head[a];
- vet[tot]:=b;
- len[tot]:=c;
- head[a]:=tot;
- inc(tot);
- next[tot]:=head[b];
- vet[tot]:=a;
- len[tot]:=;
- head[b]:=tot;
- end;
- function dfs(u,aug:longint):longint;
- var e,v,t,val,flow:longint;
- begin
- if u=src then exit(aug);
- e:=head[u]; flow:=; val:=s-;
- while e<> do
- begin
- v:=vet[e];
- if len[e]> then
- begin
- if dis[u]=dis[v]+ then
- begin
- t:=dfs(v,min(len[e],aug-flow));
- len[e]:=len[e]-t;
- len[fan[e]]:=len[fan[e]]+t;
- flow:=flow+t;
- if dis[source]>=s then exit(flow);
- if aug=flow then break;
- end;
- val:=min(val,dis[v]);
- end;
- e:=next[e];
- end;
- if flow= then
- begin
- dec(gap[dis[u]]);
- if gap[dis[u]]= then dis[source]:=s;
- dis[u]:=val+;
- inc(gap[dis[u]]);
- end;
- exit(flow);
- end;
- function maxflow:longint;
- var ans:longint;
- begin
- fillchar(gap,sizeof(gap),);
- fillchar(dis,sizeof(dis),);
- gap[]:=s; ans:=;
- while dis[source]<s do ans:=ans+dfs(source,maxlongint);
- exit(ans);
- end;
- procedure build;
- var i,j:longint;
- begin
- for i:= to n do
- for j:= to n do
- begin
- if a[i,j]='O' then add(i,j,);
- if a[i,j]='N' then add(i,j,maxlongint);
- end;
- end;
- begin
- assign(input,'bzoj3504.in'); reset(input);
- assign(output,'bzoj3504.out'); rewrite(output);
- for i:= to do
- if i mod = then fan[i]:=i+
- else fan[i]:=i-;
- while not eof do
- begin
- readln(n,x1,y1,s1,x2,y2,s2);
- if n= then break;
- inc(x1); inc(y1); inc(x2); inc(y2);
- tot:=; for i:= to n+ do head[i]:=;
- for i:= to n do
- begin
- readln(ch);
- for j:= to n do a[i,j]:=ch[j];
- end;
- s:=n; source:=s+; src:=s+; s:=s+;
- build;
- add(source,x1,*s1);
- add(source,x2,*s2);
- add(y1,src,*s1);
- add(y2,src,*s2);
- flag:=true;
- if maxflow<*(s1+s2) then flag:=false;
- if flag then
- begin
- tot:=; for i:= to n+ do head[i]:=;
- build;
- add(source,x1,*s1);
- add(source,y2,*s2);
- add(y1,src,*s1);
- add(x2,src,*s2);
- if maxflow<*(s1+s2) then flag:=false;
- end;
- if flag then writeln('Yes')
- else writeln('No');
- end;
- close(input);
- close(output);
- end.
【BZOJ3504】危桥(最大流)的更多相关文章
- [CQOI2014][bzoj3504] 危桥 [最大流]
题面 传送门 思路 这道题中惟一的特别之处,就在于"危桥"这一个只能走两次的东西 我的第一想法是做一个dp,但是这道题只需要能不能走,也没有必要 网络流?貌似是个很好的选择 我们把 ...
- BZOJ 3504: [Cqoi2014]危桥 [最大流]
3504: [Cqoi2014]危桥 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1407 Solved: 703[Submit][Status] ...
- BZOJ.3504.[CQOI2014]危桥(最大流ISAP)
BZOJ 洛谷 这种题大多是多源多汇跑网络流.往返\(a_n/b_n\)次可以看做去\(a_n/b_n\)次,直接把危桥能走的次数看做\(1\). 先不考虑别的,直接按原图建模:危桥建双向边容量为\( ...
- bzoj3504: [Cqoi2014]危桥--最大流
题目大意:给张无向图,有两个人a,b分别从各自的起点走向各自的终点,走A,B个来回,图里有些边只能走两次,求问是否能满足a,b的需求 按照题目给的表建图 S连a1,b1 a2,b2连T 跑最大流看是否 ...
- BZOJ3504 CQOI2014危桥(最大流)
如果只有一个人的话很容易想到最大流,正常桥连限流inf双向边,危桥连限流2双向边即可.现在有两个人,容易想到给两起点建超源两汇点建超汇,但这样没法保证两个人各自到达自己要去的目的地.于是再超源连一个人 ...
- 【BZOJ3504】危桥(网络流)
[BZOJ3504]危桥(网络流) 题面 BZOJ 洛谷 Description Alice和Bob居住在一个由N座岛屿组成的国家,岛屿被编号为0到N-1.某些岛屿之间有桥相连,桥上的道路是双 向的, ...
- 3504. [CQOI2014]危桥【最大流】
Description Alice和Bob居住在一个由N座岛屿组成的国家,岛屿被编号为0到N-1.某些岛屿之间有桥相连,桥上的道路是双 向的,但一次只能供一人通行.其中一些桥由于年久失修成为危桥,最多 ...
- 洛谷3163 CQOI2014危桥 (最大流)
一开始想了一发费用流做法然后直接出负环了 首先,比较显然的思路就是对于原图中没有限制的边,对应的流量就是\(inf\),如果是危桥,那么流量就应该是\(2\). 由于存在两个起始点,我们考虑直接\(s ...
- 【BZOJ】【3504】【CQOI2014】危桥
网络流/最大流 比较裸的最大流= = 无向图上走来回其实就等价与走两遍>_> 如果路径有相交其实不影响答案的 比较恶心的是两个人路过同一座桥,但走的方向不同互相抵消流量了…… 其实只要在第 ...
- [CQOI2014]危桥
题目描述 Alice和Bob居住在一个由N座岛屿组成的国家,岛屿被编号为0到N-1.某些岛屿之间有桥相连,桥上的道路是双 向的,但一次只能供一人通行.其中一些桥由于年久失修成为危桥,最多只能通行两次. ...
随机推荐
- JavaBean用JSP调用和使用JSP动作标签的区别
javabean的类可以用jsp动作标签实例化并使用. <!-- 下面这句是对Javabean类person的引用,引用的实例是p2 --> <jsp:useBean id=&quo ...
- 主题:Android、iPhone和Java三个平台一致的加密工具
先前一直在做安卓,最近要开发iPhone客户端,这其中遇到的最让人纠结的要属Java.Android和iPhone三个平台加解密不一致的问题.因为手机端后台通常是用JAVA开发的Web Service ...
- 用.htaccess获取文件夹和文件名
有时需要重定向/article/1.html文件到index.php 把.htaccess放在和index.php同一个文件夹内 反向引用中的$1代表目录,$2代表去除.html后缀后的文件名 Rew ...
- java之main
Java中用户向系统传递参数的三种基本方式 main方法 在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的 ...
- Docker之Web-UI
DockerUI 不支持多主机Command: docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock dock ...
- Alpha版本——Postmortem会议
No Bug 031402401鲍亮 031402402曹鑫杰 031402403常松 031402412林淋 031402418汪培侨 031402426许秋鑫 设想和目标 1.我们的软件要解决什么 ...
- google protocol buffer 使用说明
一:编译源码 下载地址:http://code.google.com/p/protobuf/downloads/list 下载后,根据编译说明进行编译. windows 平台,直接打开msvc中的工程 ...
- 通过List<String>动态传递参数给 sqlcommand.Parameters
通过List<String>动态传递参数 private void GetallChecked_TreeNote(TreeNodeCollection aNodes, ref int To ...
- 【转】贾扬清:希望Caffe成为深度学习领域的Hadoop
[转:http://www.csdn.net/article/2015-07-07/2825150] 在深度学习(Deep Learning)的热潮下,Caffe作为一个高效.实用的深度学习框架受到了 ...
- ConfigParser.MissingSectionHeaderError: File contains no section headers.
今天使用ConfigParser解析一个ini文件,报出如下错误: config.read(logFile) File "C:\Python26\lib\ConfigParser.py&qu ...