题目描述 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条公路,满足上面的条件。

输入描述 Input Description

第一行有三个数n,k,m,这些数之间用空格分开。 N和k如前所述,m表示有m对景点之间可以修公路。以下的m行,每一行有4个正整数a,b,c1,c2表示在景点a与b 之间可以修公路,如果修一级公路,则需要c1的花费,如果修二级公路,则需要c2的花费。

输出描述 Output Description

一个数据,表示花费最大的公路的花费。

样例输入 Sample Input
4 2 5
1 2 6 5
1 3 3 1
2 3 9 4
2 4 6 1
3 4 4 2
样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

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公路修建问题的更多相关文章

  1. COGS 2416.[HZOI 2016]公路修建 & COGS 2419.[HZOI 2016]公路修建2 题解

    大意: [HZOI 2016]公路修建 给定一个有n个点和m-1组边的无向连通图,其中每组边都包含一条一级边和一条二级边(连接的顶点相同),同一组边中的一级边权值一定大于等于二级边,另外给出一个数k( ...

  2. BZOJ-1196 公路修建问题 最小生成树Kruskal+(二分??)

    题目中一句话,最大费用最小,这么明显的二分的提示(by 以前morestep学长的经验传授)...但完全没二分,1A后感觉很虚.. 1196: [HNOI2006]公路修建问题 Time Limit: ...

  3. 【最小生成树】BZOJ 1196: [HNOI2006]公路修建问题

    1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1435  Solved: 810[Submit][Sta ...

  4. bzoj 1196: [HNOI2006]公路修建问题 二分+并查集

    题目链接 1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1576  Solved: 909[Submit ...

  5. BZOJ 1196: [HNOI2006]公路修建问题( MST )

    水题... 容易发现花费最大最小即是求 MST 将每条边拆成一级 , 二级两条 , 然后跑 MST . 跑 MST 时 , 要先加 k 条一级road , 保证满足题意 , 然后再跑普通的 MST . ...

  6. BZOJ_1196_[HNOI2006]公路修建问题_kruskal+二分答案

    BZOJ_1196_[HNOI2006]公路修建问题_kruskal+二分答案 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1196 分析: ...

  7. 洛谷P1265 公路修建(Prim)

    To 洛谷.1265 公路修建 题目描述 某国有n个城市,它们互相之间没有公路相通,因此交通十分不便.为解决这一“行路难”的问题,政府决定修建公路.修建公路的任务由各城市共同完成. 修建工程分若干轮完 ...

  8. BZOJ 1196: [HNOI2006]公路修建问题 Kruskal/二分

    1196: [HNOI2006]公路修建问题 Time Limit: 1 Sec  Memory Limit: 162 MB 题目连接 http://www.lydsy.com/JudgeOnline ...

  9. 洛谷P2323 [HNOI2006] 公路修建问题 [二分答案,生成树]

    题目传送门 公路修建问题 题目描述 OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Associa ...

随机推荐

  1. C# 重新改变数组的长度

    重新改变数组的长度 System.Array.Resize(ref FieldName, j);

  2. iOS之开发程序之间的跳转及跳转到appStore

    实例一:A程序跳转到B程序 第一步: 在B程序plist文件中,注册对外接口如图在B程序中找到info.plist点击,找到Information Property List ,右击 添加列表项 找到 ...

  3. Intent实现页面跳转

    Intent实现页面跳转: 1. startActivity(intent) 2. startActivityForResult(intent,requestCode); onActivityResu ...

  4. WPF 中的绑定方式

    1.元素间的绑定 xaml方式 <Slider Name="slider1" Value="20"/>        <TextBlock T ...

  5. Oracle计算连续天数,计算连续时间,Oracle连续天数统计

    Oracle计算连续天数,计算连续时间,Oracle连续天数统计 >>>>>>>>>>>>>>>>> ...

  6. nyoj 96 n-1位数(处理前导 0 的情况)

    n-1位数 时间限制:3000 ms  |            内存限制:65535 KB 难度:1   描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则 ...

  7. Java接口的表现形式

    一.概念理解 Java接口是一些方法特征的集合,并没有方法的具体实现,类似于电源插座,可以充不同类型的电器,但是必须适配特定的接口规范.接口是抽象化的,所以其不能被实例化的(不能有构造函数,创建对象) ...

  8. Spark1.2新特性概述

    http://mp.weixin.qq.com/s?__biz=MjM5NTc2MTg3Mw==&mid=201641685&idx=1&sn=1b75be3d774bb3f2 ...

  9. SQLSERVER 数据库性能的基本

    很久没有写文章了,在系统正式上线之前,DBA一般都要测试一下服务器的性能 比如你有很多的服务器,有些做web服务器,有些做缓存服务器,有些做文件服务器,有些做数据库服务器 做数据库服务器的那台服务器性 ...

  10. Lodop错误汇总

    代码方面 需要修改 LodopFuncs.js 里面的src地址,主要是端口号,端口号需要和服务器里面的程序的端口一样.如下:   调试错误 可以通过查看调用lodop的地方,查看lodop是否为空( ...