bzoj1532
就题目而言,这道题是裸的二分+最大流
但是这样是TLE的,我们考虑优化
1. 我们可以先贪心,这样二分的上界就可以缩小了
2. 最大流我们可以不急着跑增广路,我们可以先贪心一个流然后再跑增广路
但是我们发现上述优化还是不足以通过这题
我们考虑是不是sap不适合处理这张图(这是二分图)呢?确实是这样的
考虑到sap判断h[s]<t+1,但实际上二分图的增广路不可能太长,我们把这个条件改成h[s]<100
duang的一下,就飞快的跑过了(460ms)
而事实证明dinic似乎没有这种问题,因为根据证明,dinic跑二分图和HK算法是一样的复杂度
type node=record
po,next,flow:longint;
end; var e:array[..] of node;
w,pre,numh,p,h,cur,x,y:array[..] of longint;
ans,t,i,n,m,l,r,mid,len,need:longint; procedure add(x,y,f:longint);
begin
inc(len);
e[len].po:=y;
e[len].flow:=f;
e[len].next:=p[x];
p[x]:=len;
end; procedure build(x,y,f1,f2:longint);
begin
add(x,y,f1);
add(y,x,f2);
end; function sap:longint;
var i,j,q,u,tmp:longint;
begin
fillchar(numh,sizeof(numh),);
fillchar(h,sizeof(h),);
for i:= to t do
cur[i]:=p[i];
u:=; sap:=;
while (h[]<t+) and (h[]<) do //重要优化
begin
i:=cur[u];
while i<>- do
begin
j:=e[i].po;
if (e[i].flow>) and (h[u]=h[j]+) then
begin
cur[u]:=i;
pre[j]:=u;
u:=j;
if u=t then
begin
inc(sap);
if sap=need then exit;
while u<> do
begin
u:=pre[u];
j:=cur[u];
dec(e[j].flow);
inc(e[j xor ].flow);
end;
end;
break;
end;
i:=e[i].next;
end;
if i=- then
begin
dec(numh[h[u]]);
if numh[h[u]]= then exit;
i:=p[u];
tmp:=t;
q:=-;
while i<>- do
begin
j:=e[i].po;
if e[i].flow> then
if tmp>h[j] then
begin
q:=i;
tmp:=h[j];
end;
i:=e[i].next;
end;
h[u]:=tmp+;
inc(numh[h[u]]);
cur[u]:=q;
if u<> then u:=pre[u];
end;
end;
end; procedure swap(var a,b:longint);
var c:longint;
begin
c:=a;
a:=b;
b:=c;
end; function check(h:longint):boolean;
var i:longint;
begin
len:=-;
fillchar(p,sizeof(p),);
need:=;
for i:= to n do
w[i]:=h;
for i:= to m do //贪心初始流
begin
if w[x[i]]<w[y[i]] then swap(x[i],y[i]);
if w[x[i]]= then
begin
build(i,x[i]+m,,);
build(,i,,);
inc(need);
end
else begin
dec(w[x[i]]);
build(,i,,);
build(i,x[i]+m,,);
end;
build(i,y[i]+m,,);
end;
if need= then exit(true);
for i:= to n do
build(i+m,t,w[i],h-w[i]);
if sap=need then exit(true) else exit(false);
end; begin
readln(n,m);
for i:= to m do
begin
readln(x[i],y[i]);
if w[x[i]]<w[y[i]] then inc(w[x[i]]) else inc(w[y[i]]);
end;
for i:= to n do
if w[i]>r then r:=w[i]; //贪心上界
t:=n+m+;
l:=;
while l<=r do
begin
mid:=(l+r) shr ;
if check(mid) then
begin
ans:=mid;
r:=mid-;
end
else l:=mid+;
end;
writeln(ans);
end.
bzoj1532的更多相关文章
- BZOJ1532: [POI2005]Kos-Dicing
1532: [POI2005]Kos-Dicing Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1060 Solved: 321[Submit][St ...
- 【分块答案】【最小割】bzoj1532 [POI2005]Kos-Dicing
引用zky的题解:http://blog.csdn.net/iamzky/article/details/39667859 每条S-T路径代表一次比赛的结果.最小割会尽量让一个人赢得最多. 因为二分总 ...
- 【二分 最大流】bzoj1532: [POI2005]Kos-Dicing
晚上果然不适合调题目 Description Dicing 是一个两人玩的游戏,这个游戏在Byteotia非常流行. 甚至人们专门成立了这个游戏的一个俱乐部. 俱乐部的人时常在一起玩这个游戏然后评选出 ...
- 【bzoj1532】[POI2005]Kos-Dicing 二分+网络流最大流
题目描述 Dicing 是一个两人玩的游戏,这个游戏在Byteotia非常流行. 甚至人们专门成立了这个游戏的一个俱乐部. 俱乐部的人时常在一起玩这个游戏然后评选出玩得最好的人.现在有一个非常不走运的 ...
- 二分图&网络流&最小割等问题的总结
二分图基础: 最大匹配:匈牙利算法 最小点覆盖=最大匹配 最小边覆盖=总节点数-最大匹配 最大独立集=点数-最大匹配 网络流: 技巧: 1.拆点为边,即一个点有限制,可将其转化为边 BZOJ1066, ...
- bzoj网络流
近期看了一些bzoj的网络流,深感智商不够.不过对于网络流又有了进一步的理解. 还是mark一下吧. 献上几篇论文:1)<最小割模型在信息学竞赛中的应用> 2)<浅析一类最小割问题& ...
- [转载]hzwer的bzoj题单
counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ120 ...
- BZOJ刷题列表【转载于hzwer】
沿着黄学长的步伐~~ 红色为已刷,黑色为未刷,看我多久能搞完吧... Update on 7.26 :之前咕了好久...(足见博主的flag是多么emmm......)这几天开始会抽时间刷的,每天几道 ...
随机推荐
- [译]GC专家系列2:Java 垃圾回收的监控
原文链接:http://www.cubrid.org/blog/dev-platform/how-to-monitor-java-garbage-collection/ 这是"成为GC专家系 ...
- php入门常量
常量像变量一样,用于临时存储一个值,但是常量在许多方面与变量不同. 常量:1.是在程序执行期间无法改变数据,常量的作用域是全局的.2.常量的命名与与变量相似,只是不带美元符号“$”.一个有效的常量名由 ...
- C#网络通信
Server: using System.Net; using System.Net.Sockets; using System; using System.Collections.Generic; ...
- HTML中href的链接刷新页面问题
在上一篇随笔中说到了html()方法不能一直改变标签的值的问题,当单击完成时,回调函数返回的值瞬间就没有了,今天突然想到了,我单击的是链接啊,就算链接到本界面上,也要进行刷新,页面一刷新,显示的值自然 ...
- oracle游标小试
有时候需要大面积的修改数据,这个时候用循环语句效率不高.而临时表又不能满足点对点修改的时候,游标似一种不错的选择(PS:好像游标也是为循环而生的吧) 现在有两张表 t1(ryid number,nam ...
- php-fpm.conf 文件详解
pid string PID文件的位置. 默认为空. error_log string 错误日志的位置. 默认: 安装路径#INSTALL_PREFIX#/log/php-fpm.log. log_l ...
- H2嵌入式数据库的各种连接方式
H2database是一款用java语言编写的开源数据库, 一般用作游戏的数据存储, 当然web项目也是可以用的, web项目也可以将该数据库 首先要安装H2数据库 http://www.h2data ...
- c#类库中使用Session
网站开发中,为了保存用户的信息,有时候需要使用session.如果我们在aspx页面中使用Session,只需要Session["key"]=value就可以,获取时使用int u ...
- 1038: [ZJOI2008]瞭望塔 - BZOJ
Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如下图所示 我们可以用一条山的上方轮廓折线(x1, ...
- vim查看函数原型以及关闭窗口
问题描述: vim中查看函数原型,以及关闭vim窗口 问题解决: (1)查看函数原型 使用Shift+K可以查看用户手册 (2)自定义函数 ...