bzoj1196
带有限制的生成树
首先不难想到二分答案转化为判定性问题
假设二分出了一个答案p,
首先我们先考虑建一级公路。
由于一级公路费用是大于二级公路的,所以对于那些一级公路花费<=p的道路,
不难想到让他们建一级公路显然更合适。
如果能建一级公路的建道路数>=k
并且再选择二级公路能选到n-1条,说明答案可行
注意这里的道路选择一定要满足生成树的性质,所以我们要加入并查集优化
type node=record
x,y,c1,c2:longint;
end; var a:array[..] of node;
fa,d:array[..] of longint;
mid,i,n,k,l,r,ans,m:longint; function getf(x:longint):longint;
begin
if fa[x]<>x then fa[x]:=getf(fa[x]);
exit(fa[x]);
end; function check(p:longint):boolean;
var s,i,k1,k2:longint;
begin
for i:= to n do
begin
d[i]:=;
fa[i]:=i;
end;
s:=;
for i:= to m do
if a[i].c1<=p then
begin
k1:=getf(a[i].x);
k2:=getf(a[i].y);
if k1<>k2 then
begin
if d[k1]>d[k2] then fa[k2]:=k1
else begin
fa[k1]:=k2;
if d[k1]=d[k2] then inc(d[k2]);
end;
inc(s);
end;
end;
if s<k then exit(false);
if s=n- then exit(true);
for i:= to m do
if (a[i].c2<=p) and (a[i].c1>p) then
begin
k1:=getf(a[i].x);
k2:=getf(a[i].y);
if k1<>k2 then
begin
if d[k1]>d[k2] then fa[k2]:=k1
else begin
fa[k1]:=k2;
if d[k1]=d[k2] then inc(d[k2]);
end;
inc(s);
if s=n- then exit(true);
end;
end;
exit(false);
end; begin
readln(n,k,m);
l:=;
for i:= to m- do
begin
with a[i] do
begin
readln(x,y,c1,c2);
end;
if a[i].c1>r then r:=a[i].c1;
if a[i].c2<l then l:=a[i].c2;
end;
ans:=r;
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.
bzoj1196的更多相关文章
- BZOJ-1196 公路修建问题 最小生成树Kruskal+(二分??)
题目中一句话,最大费用最小,这么明显的二分的提示(by 以前morestep学长的经验传授)...但完全没二分,1A后感觉很虚.. 1196: [HNOI2006]公路修建问题 Time Limit: ...
- BZOJ1196: [HNOI2006]公路修建问题
Description OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织 ...
- bzoj1196:[Hnoi2010]chorus 合唱队
这数据范围明显的区间dp啊...然而据说二维会wa...那就写三维把... #include<cstdio> #include<cstring> #include<cct ...
- [BZOJ1196][HNOI2006]公路修建问题 二分答案+最小生成树
Description OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那 里的交通情况还是很糟糕.所以,OIER Association组 ...
- bzoj1196 公路修建问题
Description OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织 ...
- [HNOI2006]公路修建问题 BZOJ1196 Kruskal
题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 输入输出样例 输入样例#1: 复制 4 2 5 1 2 6 5 1 3 3 1 2 3 9 4 2 4 6 1 输出 ...
- 【分块答案】【最小生成树】【kruscal】bzoj1196 [HNOI2006]公路修建问题
二分(分块)枚举 边权上限.用kruscal判可行性. #include<cstdio> #include<algorithm> #include<cstring> ...
- BZOJ1196 [HNOI2006]公路修建问题 【二分 + Kruskal】
题目 OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织成立了,旨在建立O ...
- 【bzoj1196】[HNOI2006]公路修建问题
二分答案 验证有一种贪心的思想,就是如果这条路的c1比二分的值还小,那就要果断选择一级公路. 搜过一遍后,如果可供选择的一级公路小于k,就可以直接返回否了. 接下来继续选择,如果可以选到n-1条路,就 ...
随机推荐
- Golang,用map写个单词统计器
Golang中也有实用的泛型编程模板.如map.据Go官方团队称,其实现为Hash表,而非类似cpp或Java的红黑树.所以理论上速度更能快上几个等级(Hash与红黑树的效率对比可以看我的文章C++中 ...
- (poj)3020 Antenna Placement 匹配
题目链接 : http://poj.org/problem?id=3020 Description The Global Aerial Research Centre has been allotte ...
- ThinkPHP3.2 加载过程(三)
上次回顾: IS_CGI ,IS_WIN,IS_CLI,MAGIC_QUOTES_GPC干嘛用 IS_WIN 看了一下后面的代码 基本上就是为了保证在不同环境下运行时,由于有些操作系统会对文件路径大 ...
- hdu 4778 Gems Fight! 博弈+状态dp+搜索
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4102743.html 题目链接:hdu 4778 Gems Fight! 博弈+状态dp+搜 ...
- [C#]对象深拷贝
关键代码: /// <summary> /// 对象深拷贝 /// </summary> /// <typeparam name="T">泛型& ...
- stop() 是用于停止动画 :animated 用于判断动画是否在进行中
stop() 是用于停止动画 if($("element").is(":animated")) 用于判断动画是否在进行中
- BFC(Box,Formatting,Context) —— 块级格式化上下文
Box:CSS布局的基本单位 Formatting context是页面中的一块渲染区域,最常见的是BFC和IFC,CSS3增加了GFC和FFC BFC定义:块级格式化上下文,它是一个独立的渲染区域, ...
- JSON对象的stringify()和parse()方法
1.stringify() ---- JavaScript对象序列化为JSON字符串 eg1. var book = {title: 'JS', authors: ['Van'], edition:3 ...
- 简单的NHibernate学习笔记
NHibernate是.NET平台下的ORM框架,与ADO.NET一样实现项目中数据库与项目系统的交互. .首先要用NHibernate框架就要有第三方的dll库来作为支持,附上百度云下载地址:(链接 ...
- Linux统计某文件夹下文件、文件夹的个数
统计某文件夹下文件的个数 ls -l |grep "^-"|wc -l 统计某文件夹下目录的个数 ls -l |grep "^d"|wc -l 统计文件夹下文件 ...