题目描述

输入输出格式

输入格式:

在实际评测时,将只会有m-1行公路

输出格式:

输入输出样例

输入样例#1:

  1. 4 2 5
  2. 1 2 6 5
  3. 1 3 3 1
  4. 2 3 9 4
  5. 2 4 6 1
  6. 3 4 4 2
输出样例#1:

  1. 4
  2. 2 1
  3. 3 2
  4. 5 1
输入样例#2:

  1. 4 1 5
  2. 1 2 6 5
  3. 1 3 3 1
  4. 2 3 9 4
  5. 2 4 6 1
  6. 3 4 4 3
输出样例#2:

  1. 3
  2. 2 1
  3. 4 2
  4. 5 2

坑到炸的一句话、。。

二分+kruskal

屠龙宝刀点击就送

  1. #include <algorithm>
  2. #include <cstdio>
  3. #define N 20005
  4.  
  5. using namespace std;
  6. struct Edge
  7. {
  8. int x,y,z,id;
  9. bool operator<(Edge a)const
  10. {
  11. return z<a.z;
  12. }
  13. }e1[N],e2[N];
  14. struct node
  15. {
  16. int a,b;
  17. bool operator<(node x)const
  18. {
  19. return a<x.a;
  20. }
  21. }ans[N];
  22. int n,k,m,siz,fa[N];
  23. int find_(int x) {return x==fa[x]?x:fa[x]=find_(fa[x]);}
  24. bool check(int x)
  25. {
  26. for(int i=;i<=n;++i) fa[i]=i;
  27. int num=;
  28. for(int i=;i<=m;++i)
  29. {
  30. if(e1[i].z>x) continue;
  31. int fx=find_(e1[i].x),fy=find_(e1[i].y);
  32. if(fx!=fy)
  33. {
  34. num++;
  35. fa[fy]=fx;
  36. }
  37. }
  38. if(num<k) return false;
  39. for(int i=;i<=m;++i)
  40. {
  41. if(e2[i].z>x) continue;
  42. int fx=find_(e2[i].x),fy=find_(e2[i].y);
  43. if(fx!=fy)
  44. {
  45. fa[fy]=fx;
  46. num++;
  47. }
  48. }
  49. if(num==n-) return true;
  50. return false;
  51. }
  52. void get(int x)
  53. {
  54. for(int i=;i<=n;++i) fa[i]=i;
  55. for(int i=;i<=m;++i)
  56. {
  57. if(e1[i].z>x) continue;
  58. int fx=find_(e1[i].x),fy=find_(e1[i].y);
  59. if(fx!=fy)
  60. {
  61. siz++;
  62. fa[fy]=fx;
  63. ans[siz].a=e1[i].id;
  64. ans[siz].b=;
  65. }
  66. }
  67. for(int i=;i<=m;++i)
  68. {
  69. if(e2[i].z>x) continue;
  70. int fx=find_(e2[i].x),fy=find_(e2[i].y);
  71. if(fx!=fy)
  72. {
  73. siz++;
  74. fa[fy]=fx;
  75. ans[siz].a=e2[i].id;
  76. ans[siz].b=;
  77. }
  78. }
  79. }
  80. int main(int argc,char *argv[])
  81. {
  82. scanf("%d%d%d",&n,&k,&m);
  83. int l=,r=,anss;
  84. for(int u,v,w1,w2,i=;i<=m;++i)
  85. {
  86. scanf("%d%d%d%d",&u,&v,&w1,&w2);
  87. e1[i]=(Edge){u,v,w1,i};
  88. e2[i]=(Edge){u,v,w2,i};
  89. r=max(r,w1);
  90. }
  91. sort(e1+,e1+m);
  92. sort(e2+,e2+m);
  93. for(int mid;l<=r;)
  94. {
  95. mid=(l+r)>>;
  96. if(check(mid))
  97. anss=mid,r=mid-;
  98. else l=mid+;
  99. }
  100. printf("%d\n",anss);
  101. get(anss);
  102. sort(ans+,ans++siz);
  103. for(int i=;i<=siz;++i) printf("%d %d\n",ans[i].a,ans[i].b);
  104. return ;
  105. }

洛谷 P2323 [HNOI2006]公路修建问题的更多相关文章

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

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

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

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

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

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

  4. 【洛谷P1265】公路修建

    公路修建 题目链接 分析题意,可以发现,在(1)的条件下,(2)的情况是不会发生的, 于是直接求MST(Min Set Tree) 然而稠密图克鲁斯卡尔会TLE,建图还会爆空间, 所以用prime,用 ...

  5. P2323 [HNOI2006]公路修建问题

    题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 输入输出样例 输入样例#1: 4 2 5 1 2 6 5 1 3 3 1 2 3 9 4 2 4 6 1 输出样例# ...

  6. 【MST】P2323 [HNOI2006]公路修建问题

    Description 给定 \(n\) 个点 \(m - 1\) 条无向边,每条边有两种边权,贵一点的和便宜一点的.要求至少选择 \(k\) 条贵边使得图联通且花费最大的边权值最小. Input 第 ...

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

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

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

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

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

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

随机推荐

  1. POJ-3616

    Milking Time Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10434   Accepted: 4378 Des ...

  2. db2 command line notes

    db2ilist - list instances db2 attach to <instance> user <username> using <password> ...

  3. 5、scala面向对象-类

    一.类 1.定义类 ##定义并调用 scala> :paste // Entering paste mode (ctrl-D to finish) class HelloWord { priva ...

  4. iwork 文件格式分析

    根据维基百科,到2015年苹果推出的iwork版本 第一章:iwork2008介绍 1.文档结构: 是一个资源合集:压缩格式的(内含文件夹和文件) 在windows下修改iwork的文件后缀为.rar ...

  5. Razor与HTML混合输出陷阱与技巧

    3,Razor与HTML混合输出陷阱与技巧   属性名称误判 有时候我们必须让html内容与razor语句紧接在一起, eg:      您好,a先生 假设变量名称为ViewBag.Name, 您好, ...

  6. 字节码操作-Javaassist

    下面就是一个具体的demo来介绍利用Javaassist库来创建类,不过要先在工程里面导入Javaassist的架包, package JavaAasist; import java.lang.ref ...

  7. 为什么要用babel-polyfill

    1.为什么要用babel-polyfill Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如 Iterator.Generator.Set.Maps.Prox ...

  8. Spark 中的 checkpoint

    为了实现容错,需要做checkpoint.以Streaming为例,checkpoint中有两种数据: 1. Metadata checkpointing:用于恢复driver端出错的情况.其中包含: ...

  9. Node.js 内置模块crypto加密模块(3) HMAC

    HMAC:哈希消息认证码 ( Hash-based Message Authentication Code ) HMAC是密钥相关的哈希算法 使用 HMAC 进行加密的Node实现的一种方法: &qu ...

  10. 剑指Offer的学习笔记(C#篇)-- 二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 一 . 解题思路 新颖的解法,使得该题目运用到了二进制的位运算符.先了解一下位运算符! 此题便很好的发挥了位运算符& ...