poj2391,poj2455
这两题本质是一致的;
一般来说,对于最长(短)化最短(长)的问题我们一般都使用二分答案+判定是否可行
因为这样的问题,我们一旦知道答案,就能知道全局信息
拿poj2455举例,对于二分出的一个答案,我们将不符合的边全部去掉,在做一遍最大流判断是否成立即可
注意这道题有重边,所以用链式前向星比较好(TT,当时我用的数组模拟邻接表表不要太烦)
type node=record
po,flow,cost:longint;
end;
var w,ow:array[..,..] of node;
cur,pre,numh,h,s,s0:array[..] of longint;
ans,max,mid,l,r,x,y,z,i,n,m,p:longint; procedure add(x,y,z,f:longint); //很繁琐的结构,需要检查好久,重边优先选择链式前向星,比较方便
begin
inc(s[x]);
w[x,s[x]].po:=y;
w[x,s[x]].cost:=z;
w[x,s[x]].flow:=f;
end; function maxflow(k:longint):boolean; //很喜欢写sap,判定
var j,sum,u,i,t,r,tmp:longint;
begin
max:=-;
fillchar(pre,sizeof(pre),);
fillchar(cur,sizeof(cur),);
fillchar(h,sizeof(h),);
fillchar(numh,sizeof(numh),); //一定要注意,这句话没有不影响程序结果,但会拖慢程序速度(相当于没用到GAP优化),谨记
fillchar(s0,sizeof(s0),);
for i:= to n do
for j:= to s[i] do
begin
if w[i,j].cost<=k then //根据条件构造新图
begin
inc(s0[i]);
ow[i,s0[i]]:=w[i,j];
end;
end;
numh[]:=n;
sum:=;
u:=;
while h[]<n do
begin
if u=n then
begin
i:=;
while i<>n do
begin
t:=cur[i];
if max<ow[i,t].cost then max:=ow[i,t].cost; //小优化而已,在最大流里面找一条最大的边,实际上答案是这个
dec(ow[i,t].flow);
i:=ow[i,t].po;
end;
inc(sum);
if sum=p then exit(true);
u:=;
end;
r:=-;
for i:= to s0[u] do
if (ow[u,i].flow>) and (h[u]=h[ow[u,i].po]+) then
begin
r:=i;
break;
end; if r<>- then
begin
cur[u]:=r;
pre[ow[u,r].po]:=u;
u:=ow[u,r].po;
end
else begin
dec(numh[h[u]]);
if numh[h[u]]= then exit(false);
tmp:=n; //注意这里千万不要顺手打成maxlongint之类
for i:= to s0[u] do
if (ow[u,i].flow>) and (tmp>h[ow[u,i].po]) then tmp:=h[ow[u,i].po];
h[u]:=tmp+;
inc(numh[h[u]]);
if u<> then u:=pre[u];
end;
end;
exit(false);
end; begin
readln(n,m,p);
for i:= to m do
begin
readln(x,y,z);
add(x,y,z,);
add(y,x,z,);
if z>r then r:=z;
end;
l:=;
while l<=r do
begin
mid:=(l+r) shr ;
if maxflow(mid) then
begin
ans:=max; //小小的优化,但不是所有二分判定都可以用
r:=max-;
end
else l:=mid+;
end;
writeln(ans);
end.
poj2391也是一样的,只不过多了floyd预处理
一般的,对于答案越大,决策就越有可能成功的这类具有单调性的题目,通常使用二分答案
poj2391,poj2455的更多相关文章
- Pyhton开源框架(加强版)
info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...
- MPlayer
名称 mplayer − 电影播放器 mencoder − 电影编解码器 概要 mplayer [选项] [文件|URL|播放列表|−] mplayer [选项] 文件1 [指定选项] [文件 ...
- python 爬取腾讯微博并生成词云
本文以延参法师的腾讯微博为例进行爬取并分析 ,话不多说 直接附上源代码.其中有比较详细的注释. 需要用到的包有 BeautifulSoup WordCloud jieba # coding:utf-8 ...
- 面经 cisco
1. 优先级反转问题及解决方法 (1)什么是优先级反转 简单从字面上来说,就是低优先级的任务先于高优先级的任务执行了,优先级搞反了.那在什么情况下会生这种情况呢? 假设三个任务准备执行,A,B,C,优 ...
- linux驱动(续)
网络通信 --> IO多路复用之select.poll.epoll详解 IO多路复用之select.poll.epoll详解 目前支持I/O多路复用的系统调用有 select,psel ...
- HttpServletRequest对象(一)
javaweb学习总结(十)——HttpServletRequest对象(一) 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HT ...
- POJ2455 Secret Milking Machine【二分,最大流】
题目大意:N个点P条边,令存在T条从1到N的路径,求路径上的边权的最大值最小为多少 思路:做了好多二分+最大流的题了,思路很好出 二分出最大边权后建图,跑dinic 问题是....这题是卡常数的好题! ...
- 【poj2455】 Secret Milking Machine
http://poj.org/problem?id=2455 (题目链接) 题意 给出一张n个点,p条边的无向图,需要从1号节点走到n号节点一共T次,每条边只能经过1次,问T次经过的最大的边最小是多少 ...
- poj2391 Ombrophobic Bovines 拆点+二分法+最大流
/** 题目:poj2391 Ombrophobic Bovines 链接:http://poj.org/problem?id=2391 题意:有n块区域,第i块区域有ai头奶牛,以及一个可以容纳bi ...
随机推荐
- php 操作数组 (合并,拆分,追加,查找,删除等)
1. 合并数组 array_merge()函数将数组合并到一起,返回一个联合的数组.所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加.其形式为: array array_merg ...
- C盘清理大作战
C盘会随着使用时间慢慢变满(即使你不在C盘装程序),下面就记录几个C盘清理的方法: 1.使用清理软件清理C盘(360卫视,腾讯管家) 2.转移虚拟内存:计算机右键属性——高级管理设置——高级——性能- ...
- delphi xe memory leak produced in WSDLLookup.pas
constructor TWSDLLookup.Create; begin FLookup := TDictionary<string, Variant>.Create; end; des ...
- Spark机器学习 Day2 快速理解机器学习
Spark机器学习 Day2 快速理解机器学习 有两个问题: 机器学习到底是什么. 大数据机器学习到底是什么. 机器学习到底是什么 人正常思维的过程是根据历史经验得出一定的规律,然后在当前情况下根据这 ...
- OO之策略模式
以下为策略模式详解: 引子: 使用策略就是要实现可扩展性,那么多态是不可少的.何谓可扩展性呢? 比如:我们用面向对象的思想来设计飞机,基类为飞机,飞机可以有很多种,客机,直升机,战斗机等,不同种类的飞 ...
- Experience all that SharePoint 15 has to offer. Start now or Remind me later.
$spSite = Get-SpSite($waUrl); $spSite.AllowSelfServiceUpgrade = $false
- VS2010界面主题更换全过程
VisualStudio 2010的界面默认是蓝色的,背景是白色,字体是宋体,这些设置习惯了还好,但是可能看多了不怎么舒服.而且如果以前是用VS 6.0的知道,它使用的字体更为舒服清晰.所以,可以对V ...
- (转)Const,Const函数,Const变量,函数后面的Const
本文转自http://www.cnblogs.com/Fancyboy2004/archive/2008/12/23/1360810.html 看到const 关键字,C++程序员首先想到的可能是co ...
- js页面刷新一次
// var str = document.location.hash, // index = str.indexOf("#"); // if(index == 0){ // wi ...
- NOI2015考试小结
这次NOI2015有幸获得金牌考进了国家集训队,意味着我的OI退役时间既省选之后有延迟了好几个月,又有了新的目标吧. 先说一下考试之外的感受吧,学军宿舍很牛X,接待NOIers而不提供插座,唯一可以用 ...