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. Kubernetes如何支持有状态服务的部署?

    作者:Jack47 转载请保留作者和原文出处 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. Kubernetes对无状态服务有完善的支持 ...

  2. 快递单号查询免费api接口(PHP示例)

    快递单号查询API,可以对接顺丰快递查询,邮政快递查询,中通快递查询等.这些快递物流企业,提供了快递单号自动识别接口,快递单号查询接口等快递物流服务.对于电商企业,ERP服务企业,集成此接口到自己的软 ...

  3. Next Permutation 下一个排列

    Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...

  4. Pascal's Triangle(杨辉三角)

    Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...

  5. MySQL/MariaDB的锁

    本文目录: 1.MariaDB/MySQL事务提交的方式 2.MariaDB/MySQL中的锁简介 2.1 不同存储引擎支持的锁级别 2.2 锁类型 2.3 锁兼容性 3.MyISAM的表级锁(loc ...

  6. Day2_and_Day3 文件操作

    文件修改操作: 文件的修改操作:文件并没有修改操作,实际是将一个编写的新文件覆盖了原有的文件 替换文件中的某个内容: with open('old.txt','r',encoding='utf-8') ...

  7. Oracle12c中性能优化&amp;功能增强新特性之临时undo

    临时表最有意思的特点之一是undo段也存储在常规undo表空间中,而它们的undo反过来被redo保护,这会导致一些问题. 1)  写undo表空间需要数据库以读写模式打开,因此,只读数据库和物理备库 ...

  8. gdb命令中attach使用

    [测试程序] 我们先看看我们的测试程序: /* in eg1.c */ int wib(int no1, int no2) {         int result, diff;         di ...

  9. Java 8 基础教程 - Predicate

    在Java 8中,Predicate是一个函数式接口,可以被应用于lambda表达式和方法引用.其抽象方法非常简单: /** * Evaluates this predicate on the giv ...

  10. longestCommonPrefix

    Description: Write a function to find the longest common prefix string amongst an array of strings. ...