CODEVS 3000公路修建问题
题目描述 Description
OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多。然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕。所以,OIER Association组织成立了,旨在建立OI island的交通系统。 OI island有n个旅游景点,不妨将它们从1到n标号。现在,OIER Association需要修公路将这些景点连接起来。一条公路连接两个景点。公路有,不妨称它们为一级公路和二级公路。一级公路上的车速快,但是修路的花费要大一些。 OIER Association打算修n-1条公路将这些景点连接起来(使得任意两个景点之间都会有一条路径)。为了保证公路系统的效率, OIER Association希望在这n-1条公路之中,至少有k条(0≤k≤n-1)一级公路。OIER Association也不希望为一条公路花费的钱。所以,他们希望在满足上述条件的情况下,花费最多的一条公路的花费尽可能的少。 而你的任务就是,在给定一些可能修建的公路的情况下,选择n-1条公路,满足上面的条件。
第一行有三个数n,k,m,这些数之间用空格分开。 N和k如前所述,m表示有m对景点之间可以修公路。以下的m行,每一行有4个正整数a,b,c1,c2表示在景点a与b 之间可以修公路,如果修一级公路,则需要c1的花费,如果修二级公路,则需要c2的花费。
一个数据,表示花费最大的公路的花费。
4 2 5
1 2 6 5
1 3 3 1
2 3 9 4
2 4 6 1
3 4 4 2
4
1≤n≤10000,0≤k≤n-1,n-1≤m≤20000,1≤a,b≤n,a≠b,1≤c2≤c1≤30000
解题思路
标程:二分长度之后用01树建树判断输出
但由于数据太水,贪心即可:对c1排序,然后取k条边,再对c2排序,取剩余边,跑一边克鲁斯卡尔更新最大值,即可AC
program t5;
type tre=record
l,r,c1,c2:longint;
end;
var
tr:array[..] of tre;
ro:array[..] of longint;
m,n,i,max,sum,k:longint;
function root(x:longint):longint;
begin
if ro[x]=x then exit(x);
root:=root(ro[x]);
ro[x]:=root;
exit(root);
end;
procedure sort1(l,r: longint);
var
i,j,x: longint;
y:tre;
begin
i:=l;
j:=r;
x:=tr[(l+r) div ].c1;
repeat
while tr[i].c1<x do
inc(i);
while x<tr[j].c1 do
dec(j);
if not(i>j) then
begin
y:=tr[i];
tr[i]:=tr[j];
tr[j]:=y;
inc(i);
j:=j-;
end;
until i>j;
if l<j then
sort1(l,j);
if i<r then
sort1(i,r);
end;
procedure sort2(l,r: longint);
var
i,j,x: longint;
y:tre;
begin
i:=l;
j:=r;
x:=tr[(l+r) div ].c2;
repeat
while tr[i].c2<x do
inc(i);
while x<tr[j].c2 do
dec(j);
if not(i>j) then
begin
y:=tr[i];
tr[i]:=tr[j];
tr[j]:=y;
inc(i);
j:=j-;
end;
until i>j;
if l<j then
sort2(l,j);
if i<r then
sort2(i,r);
end;
begin
read(n,k,m);
for i:= to n do ro[i]:=i;
for i:= to m do
begin
read(tr[i].l,tr[i].r,tr[i].c1,tr[i].c2);
end;
sort1(,m);
sum:=;
for i:= to m do
begin
if root(tr[i].l)<>root(tr[i].r) then
begin
inc(sum);
ro[root(tr[i].l)]:=root(tr[i].r);
if max<tr[i].c1 then max:=tr[i].c1;
if sum=k then break;
end;
end;
sort2(,m);
for i:= to m do
begin
if root(tr[i].l)<>root(tr[i].r) then
begin
ro[root(tr[i].l)]:=root(tr[i].r);
if max<tr[i].c2 then max:=tr[i].c2;
end;
end;
writeln(max);
end.
CODEVS 3000公路修建问题的更多相关文章
- COGS 2416.[HZOI 2016]公路修建 & COGS 2419.[HZOI 2016]公路修建2 题解
大意: [HZOI 2016]公路修建 给定一个有n个点和m-1组边的无向连通图,其中每组边都包含一条一级边和一条二级边(连接的顶点相同),同一组边中的一级边权值一定大于等于二级边,另外给出一个数k( ...
- BZOJ-1196 公路修建问题 最小生成树Kruskal+(二分??)
题目中一句话,最大费用最小,这么明显的二分的提示(by 以前morestep学长的经验传授)...但完全没二分,1A后感觉很虚.. 1196: [HNOI2006]公路修建问题 Time Limit: ...
- 【最小生成树】BZOJ 1196: [HNOI2006]公路修建问题
1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1435 Solved: 810[Submit][Sta ...
- bzoj 1196: [HNOI2006]公路修建问题 二分+并查集
题目链接 1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1576 Solved: 909[Submit ...
- BZOJ 1196: [HNOI2006]公路修建问题( MST )
水题... 容易发现花费最大最小即是求 MST 将每条边拆成一级 , 二级两条 , 然后跑 MST . 跑 MST 时 , 要先加 k 条一级road , 保证满足题意 , 然后再跑普通的 MST . ...
- BZOJ_1196_[HNOI2006]公路修建问题_kruskal+二分答案
BZOJ_1196_[HNOI2006]公路修建问题_kruskal+二分答案 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1196 分析: ...
- 洛谷P1265 公路修建(Prim)
To 洛谷.1265 公路修建 题目描述 某国有n个城市,它们互相之间没有公路相通,因此交通十分不便.为解决这一“行路难”的问题,政府决定修建公路.修建公路的任务由各城市共同完成. 修建工程分若干轮完 ...
- BZOJ 1196: [HNOI2006]公路修建问题 Kruskal/二分
1196: [HNOI2006]公路修建问题 Time Limit: 1 Sec Memory Limit: 162 MB 题目连接 http://www.lydsy.com/JudgeOnline ...
- 洛谷P2323 [HNOI2006] 公路修建问题 [二分答案,生成树]
题目传送门 公路修建问题 题目描述 OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Associa ...
随机推荐
- PHP加速器
转http://www.vpser.net/opt/apc-eaccelerator-xcache.html 一.PHP加速器介绍 PHP加速器是一个为了提高PHP执行效率,从而缓存起 ...
- IIS 之 查看并发连接数
如果要查看IIS连接数,最简单方便的方法是通过“网站统计”来查看,“网站统计”的当前在线人数可以认为是当前IIS连接数.然而,“网站统计”的当前在线人数统计时间较长,一般为10分钟或15分钟,再加上统 ...
- Number of failed login attempts exceeds threshold value
OEM发出好多告警,Number of failed login attempts exceeds threshold value. profile当前配置10次失败就会锁定user 查看下,dba_ ...
- 深入浅出ECharts系列 (二) 折线图
深入浅出ECharts系列(二) 目标 本次教程的目标是实现“折线图堆叠”折线,实现结果如图: 2. 准备工作 a) 首先下载ECharts插件,你可以根据自己的实际需求选择你想要下载 ...
- 深入理解计算机系统第二版习题解答CSAPP 2.15
只使用位级运算和逻辑运算,编写一个C表达式,它等价于x==y.换句话说,当x和y相等时它将返回1,否则就返回0. !(x ^ y)
- ADO和ADO.NET有什么不同?
1.一些ADO中常见的类型比如RecordSet在ADO.NET中已经没有了,而且在ADO.NET中也新增了许多在传统ADO中找不到的直接对应的新类型(如数据适配器): 2.传统的ADO主要针对紧密连 ...
- php中GD库的一些简单使用
今天了解了一些GD库的简单使用,现在稍微做一下总结! GD库是什么?,graphic device,图像工具库,gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处 ...
- SQL Server 2012 内存管理 (memory management) 改进
SQL Server 2012 的内存管理和以前的版本相比,有以下的一些变化. 一.内存分配器的变化 SQL Server 2012以前的版本,比如SQL Server 2008 R2等, 有sing ...
- 用Java socket (TCP通信模型)实现一个简单的web 服务器
package cn.magicdu.think.socket; import java.io.OutputStream; import java.io.PrintWriter; import jav ...
- spring3.2.0与mybatis3.2.7整合出错--Failed to read candidate component class--nested exception is java.lang.IllegalArgumentException
错误信息如下: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate com ...