【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1196

【题目大意】

  对于每条可能维修的公路可选择修一级公路或者二级公路,价值不同

  要求图连通,且至少有k条一级公路时最大价值公路价值最小。

【题解】

  二分答案,从一级公路开始处理,利用并查集验证两个条件。

【代码】

#include <cstdio>
#include <algorithm>
using namespace std;
const int N=20005;
int f[10005],x[N],y[N],c1[N],c2[N],l=1,r=0,ans,n,m,k;
int sf(int x){return x==f[x]?x:f[x]=sf(f[x]);}
bool check(int u){
int k1=0,k2=0;
for(int i=1;i<=n;i++)f[i]=i;
for(int i=1;i<m;i++){
if(c1[i]>u)continue;
int fx=sf(x[i]),fy=sf(y[i]);
if(fx!=fy){
f[fy]=fx;
k1++;
}
}
for(int i=1;i<m;i++){
if(c2[i]>u)continue;
int fx=sf(x[i]),fy=sf(y[i]);
if(fx!=fy){
f[fy]=fx;
k2++;
}
}return (k1>=k&&k1+k2==n-1);
}
int main(){
scanf("%d%d%d",&n,&k,&m);
for(int i=1;i<m;i++){
scanf("%d%d%d%d",x+i,y+i,c1+i,c2+i);
r=max(c1[i],r); r=max(c2[i],r);
}
while(l<=r){
int mid=(l+r)>>1;
if(check(mid))r=mid-1,ans=mid;
else l=mid+1;
}printf("%d\n",ans);
return 0;
}

  

BZOJ 1196 [HNOI2006]公路修建问题(二分答案+并查集)的更多相关文章

  1. [HNOI2006]公路修建问题 (二分答案,并查集)

    题目链接 Solution 二分答案+并查集. 由于考虑到是要求花费的最小值,直接考虑到二分. 然后对于每一个二分出来的答案,模拟 \(Kruskal\) 的过程再做一遍连边. 同时用并查集维护联通块 ...

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

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

  3. bzoj 1196: [HNOI2006]公路修建问题(二分+贪心)

    传送门 解题思路 看到最大,肯定要先想二分答案.二分之后首先从小到大枚举\(k\)个小于\(lim\)的所有一级公路,然后用并查集连到一起,然后就在剩下的里面从小到大找n-1-k个二级公路,模仿最小生 ...

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

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

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

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

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

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

  7. BZOJ 1196 [HNOI2006]公路修建问题:二分 + 贪心生成树check(类似kruskal)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1196 题意: n个城市,m对城市之间可以修公路. 公路有两种,一级公路和二级公路,在第i对 ...

  8. bzoj 1196: [HNOI2006]公路修建问题

    Description OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织 ...

  9. [BZOJ1196][HNOI2006]公路修建问题 二分答案+最小生成树

    Description OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那 里的交通情况还是很糟糕.所以,OIER Association组 ...

随机推荐

  1. Linux命令之ifconfig

    许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...

  2. linux实用指令---持续更新

    awk '!a[$0]++'  a > b   删除重复行 ldd  判断某条命令需要哪些共享库文件的支持          ---------------      ]$  ldd a.out ...

  3. 全角和半角相互转换(C语言实现)

    目前,我们接触的汉字编码主要包括GBK和GB2312.其中,GB2312又称国标码,它是一个简化字的编码规范,也包括其他的符号.字母.日文假名等,共7445个图形字符,其中汉字占6763个.我们平时说 ...

  4. 18.java.lang.OutOfMemoryException

    java.lang.OutOfMemoryException内存不足错误 当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误.

  5. oracle 高级分组

    oracle 高级分组 博客分类: 数据库基础 oraclesql  10.高级分组 本章目标: 对于增强的group by需要掌握: 1.使用rollup(也就是roll up累计的意思)操作产生s ...

  6. [问题解决] Could not update ICEauthority file /home/username/.ICEauthority

    错误: Could not update ICEauthority file /home/username/.ICEauthority 发生场景: 虚拟机下的ubuntu server12.04 解决 ...

  7. C++默认参数与函数重载 注意事项

    一.默认参数在C++中,可以为参数指定默认值.在函数调用时没有指定与形参相对应的实参时, 就自动使用默认参数. 默认参数的语法与使用:(1)在函数声明或定义时,直接对参数赋值.这就是默认参数:(2)在 ...

  8. tomcat oracle 连接池配置

    <?xml version='1.0' encoding='utf-8'?> <Context displayName="zcgl" docBase=" ...

  9. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(九)

    目的 1. 使用verilog/vhdl设计一个PCI的watchdog设备. 2. 通过systemverilog 写testbench. 很久之前研究过AC97的verilog代码.但是很久没用v ...

  10. configure mount nfs

    qemu-img convert -f raw -O qcow2 nix.img ruiynix.qcow2 1,yum createrepo