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

题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1196

分析:

先把所有路都拆成两条。

二分答案mid,把大于mid的边除去,优先加一级公路,判断能不能加进去k条。

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 10050
struct A{
int a,b,v;
}e[N<<2];
int n,m,k,fa[N],usex[N<<1],usey[N<<1];
int find(int x){
return fa[x]^x?fa[x]=find(fa[x]):x;
}
bool check(int x){
for(int i=1;i<=n;i++)fa[i]=i;
int ne=0;
for(int i=1;i<=m;i++){
if(e[i].v>x)continue;
int dx=find(e[i].a),dy=find(e[i].b);
if(dx!=dy){
fa[dx]=dy;
ne++;if(ne==n-1)return 1;
}
}if(ne<k)return 0;
for(int i=m+1;i<=2*m;i++){
if(e[i].v>x)continue;
int dx=find(e[i].a),dy=find(e[i].b);
if(dx!=dy){
fa[dx]=dy;ne++;if(ne==n-1)return 1;
}
}return 0;
}
int main(){
scanf("%d%d%d",&n,&k,&m);m--;
int x,y,z,w;
for(int i=1;i<=m;i++){
scanf("%d%d%d%d",&x,&y,&z,&w);
e[i].a=e[i+m].a=x;
e[i].b=e[i+m].b=y;
e[i].v=z;e[i+m].v=w;
}
int l=0,r=1<<30;
while(l<r){
int mid=l+r>>1;
if(check(mid))r=mid;
else l=mid+1;
}
printf("%d\n",l);
for(int i=1;i<=n;i++)fa[i]=i;
int ne=0;
for(int i=1;i<=m;i++){
if(e[i].v>l)continue;
int dx=find(e[i].a),dy=find(e[i].b);
if(dx!=dy){
fa[dx]=dy;
ne++;
usex[i]=1;
}
}
for(int i=m+1;i<=m+m;i++){
if(e[i].v>l)continue;
int dx=find(e[i].a),dy=find(e[i].b);
if(dx!=dy){
fa[dx]=dy;
ne++;
usey[i-m]=1;
}
}
for(int i=1;i<=m;i++){
if(usex[i])printf("%d 1\n",i);
else if(usey[i])printf("%d 2\n",i);
}
}

BZOJ_1196_[HNOI2006]公路修建问题_kruskal+二分答案的更多相关文章

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

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1196 [题目大意] 对于每条可能维修的公路可选择修一级公路或者二级公路,价值不同 要求 ...

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

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

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

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

  4. BZOJ1196 [HNOI2006]公路修建问题 【二分 + Kruskal】

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

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

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

  6. 洛谷 P2323 [HNOI2006]公路修建问题 解题报告

    P2323 [HNOI2006]公路修建问题 题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 思路: 二分答案 然后把每条能加的大边都加上,然后加小边 但在洛谷的题 ...

  7. 1196/P2323: [HNOI2006]公路修建问题

    1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2191  Solved: 1258 Descriptio ...

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

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

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

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

随机推荐

  1. CF959F

    题目大意:给定n个数,有Q次询问,每次询问由两个数l,x组成,表示前缀[1,l]构成的子序列有多少异或起来为x,个数%1e9+7 做法:考虑一个由x个数构成的线性基,如果这个线性基由Y个数构成,可以通 ...

  2. c语言 基本运算

    计算机的基本能力就是计算,所以一门程序设计语言的计算能力是非常重要的.C语言之所以无所不能,是因为它不仅有丰富的数据类型,还有强大的计算能力.C语言一共有34种运算符,包括了常见的加减乘除运算.这讲就 ...

  3. 《转》xcode创建一个工程的多个taget,便于测试和发布多个版本

    背景:很多时候,我们需要在一个工程中创立多个target,也就是说我们希望同一份代码可以创建两个应用,放到模拟器或者真机上,或者是,我们平时有N多人合作开发,当测试的时候,在A这里装了一遍测A写的那块 ...

  4. 【转】火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法

    关于 GCJ-02 和 BD-09 ,请参考 http://developer.baidu.com/map/question.htm#qa0043 . 算法代码如下,其中 bd_encrypt 将 G ...

  5. Web安全工具大汇聚

    http://www.owasp.org/index.PHP/Phoenix/Tools http://sebug.net/paper/other/Web安全工具大汇聚.txt =========== ...

  6. ubuntu导入公钥的方法

    导入公钥的办法: #方法1: gpg --keyserver subkeys.pgp.NET --recv 6E871C4A881574DEgpg --export --armor 6E871C4A8 ...

  7. (译)WebRTC实战: STUN, TURN, Signaling

    http://xiaol.me/2014/08/24/webrtc-stun-turn-signaling/ 原文:WebRTC in the real world: STUN, TURN and s ...

  8. openresty + lua-resty-weedfs + weedfs + graphicsmagick动态生成缩略图(类似淘宝方案)

    openresty + lua-resty-weedfs + weedfs + graphicsmagick动态生成缩略图(类似淘宝方案) --大部分的网站都要涉及到图片缩略图的处理,比如新闻配图,电 ...

  9. cocos2d-x 欢乐捕鱼游戏总结

    这几天一直都在做一个捕鱼游戏Demo,大概花掉了我快一个礼拜的时间.游戏主体是使用的cocos2d-x高级开发教程里面提供的小部分框架基本功能.然后自己加入所有的UI元素和玩法.变成了一个体验不错的捕 ...

  10. linux监控系统的状态

    1.命令w的第一行和uptime或者用upload2.system load averages 表示单位时间短内活动的进程数3.查看cpu的个数和核数processor.physical id 4.v ...