【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

二分最后选的边中的最大值是多少。
mid

所有边权小于等于mid的边都可以用了。

那么我们要怎么选择呢?

->优先选择一级的道路。

因为它比较贵一点。

那么找到所有一级道路小于等于mid的路径。

(既然可以连,为什么不连?就算连的是二级道路,它对联通性的贡献也是一样的

(而且二级道路更便宜,所以肯定也可以连

(所以可以这样贪心地连,且不会影响到最后答案

把它们都加进去。

->按照克鲁斯卡尔算法的并查集的方法连(如果已经有链接两个连通块的了就不连这条边

然后看看能不能凑够k条边

如果可以的话。

那么就继续凑2级的道路。

直到凑够n-1条边构成生成树为止。

【代码】

  1. #include <bits/stdc++.h>
  2. #define LL long long
  3. #define rep1(i,a,b) for (int i = a;i <= b;i++)
  4. #define rep2(i,a,b) for (int i = a;i >= b;i--)
  5. #define all(x) x.begin(),x.end()
  6. #define pb push_back
  7. #define lson l,mid,rt<<1
  8. #define rson mid+1,r,rt<<1|1
  9. using namespace std;
  10. const double pi = acos(-1);
  11. const int dx[4] = {0,0,1,-1};
  12. const int dy[4] = {1,-1,0,0};
  13. const int M = 2e4;
  14. const int N = 1e4;
  15. struct abc{
  16. int x,y,c1,c2;
  17. }a[M+10];
  18. int n,k,m,f[N+10];
  19. int ff(int x){
  20. if (f[x]==x) return x;
  21. else return f[x] = ff(f[x]);
  22. }
  23. bool ok(int bound){
  24. rep1(i,1,n) f[i] = i;
  25. int cnt = 0;
  26. rep1(i,1,m){
  27. if (a[i].c1>bound) continue;
  28. int x = ff(a[i].x),y = ff(a[i].y);
  29. if (x!=y){
  30. f[x] = y;
  31. cnt++;
  32. }
  33. }
  34. if (cnt<k) return false;
  35. rep1(i,1,m){
  36. if (a[i].c2>bound) continue;
  37. int x = ff(a[i].x),y = ff(a[i].y);
  38. if (x!=y){
  39. f[x] = y;
  40. cnt++;
  41. }
  42. }
  43. if (cnt<n-1) return false;
  44. return true;
  45. }
  46. int main(){
  47. #ifdef LOCAL_DEFINE
  48. freopen("rush_in.txt", "r", stdin);
  49. #endif
  50. scanf("%d%d%d",&n,&k,&m);
  51. rep1(i,1,m){
  52. scanf("%d%d%d%d",&a[i].x,&a[i].y,&a[i].c1,&a[i].c2);
  53. }
  54. int l = 1,r = 3e4,temp = -1;
  55. while (l <= r){
  56. int mid = (l+r)>>1;
  57. if (ok(mid )){
  58. temp = mid;
  59. r = mid-1;
  60. }else l = mid+1;
  61. }
  62. printf("%d\n",temp);
  63. return 0;
  64. }

【BZOJ 1196】[HNOI2006]公路修建问题的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 1196: [HNOI2006]公路修建问题 - BZOJ

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

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

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

随机推荐

  1. linux日常指令、概念

    指令 cal 查看日历date 查看日期bc 计算器ls 查看文件ls -l 查看具体信息(权限,时间等)ls -a 查看所有的文件包括隐藏文件ll 作用同上d* 开头的都是文件夹,- 开头的都是文件 ...

  2. poj 2663 Tri Tiling (状压dp+多米诺骨牌问题+滚动数组反思)

    本来直接一波状压dpAC的 #include<cstdio> #include<cstring> #include<algorithm> #define REP(i ...

  3. 安装NexT主题

    Hexo 安装主题的方式非常简单,只需要将主题文件拷贝至站点目录的 themes 目录下, 然后修改下配置文件即可. 下载主题包 在终端窗口下,定位到 Hexo 站点目录下.使用 Git checko ...

  4. 如何在 Linux 上安装 Nginx (源码安装)

    如何在 Linux( CentOS ) 上安装 Nginx 1.下载 nginx 链接 : https://pan.baidu.com/s/1sll0Hrf 密码 : xnem 2.安装 gcc ( ...

  5. android canvas 画图笔记

    android canvas 画图笔记 1.PathEffect类 画虚线 Paint p = new Paint(Paint.ANTI_ALIAS_FLAG); p.setStyle(Paint.S ...

  6. synchronized与static synchronized 的差别、synchronized在JVM底层的实现原理及Java多线程锁理解

    本Blog分为例如以下部分: 第一部分:synchronized与static synchronized 的差别 第二部分:JVM底层又是怎样实现synchronized的 第三部分:Java多线程锁 ...

  7. android开发面试题

    找了将近两个星期的工作,面试了5家公司,罗列一下笔试或者面试时的问题,祝大家好运 1,handler机制 答:handler执行机制:1).在主线程中创建handler 2).子线程中借助主线程的ha ...

  8. poj 3311 Hie with the Pie (TSP问题)

    Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4491   Accepted: 2376 ...

  9. extjs 时间范围选择的实现

    extjs中 有时须要选择一个日期范围 ,须要自己主动推断,选择的開始日期不能大于结束日期,或结束日期不能小于開始日期,实现的代码例如以下 效果图: watermark/2/text/aHR0cDov ...

  10. Android中Handler原理

    Handler主要是主线程和子线程通信.一般子线程中做一些耗时操作做完之后通知主线程来改动UI. 实际上android系统在Activity启动或者状态变化等都是通过Handler机制实现的. 首先进 ...