1196: [HNOI2006]公路修建问题

Time Limit: 1 Sec  Memory Limit: 162 MB

题目连接

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

Description

OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多。然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕。所以,OIER Association组织成立了,旨在建立OI island的交通系统。 OI island有n个旅游景点,不妨将它们从1到n标号。现在,OIER Association需要修公路将这些景点连接起来。一条公路连接两个景点。公路有,不妨称它们为一级公路和二级公路。一级公路上的车速快,但是修路的 花费要大一些。 OIER Association打算修n-1条公路将这些景点连接起来(使得任意两个景点之间都会有一条路径)。为了保证公路系统的效率, OIER Association希望在这n-1条公路之中,至少有k条(0≤k≤n-1)一级公路。OIER Association也不希望为一条公路花费的钱。所以,他们希望在满足上述条件的情况下,花费最多的一条公路的花费尽可能的少。而你的任务就是,在给 定一些可能修建的公路的情况下,选择n-1条公路,满足上面的条件。

Input

第一行有三个数n(1≤n≤10000),k(0≤k≤n-1),m(n-1≤m≤20000),这些数之间用空格分开。 N和k如前所述,m表示有m对景点之间可以修公路。以下的m-1行,每一行有4个正整数a,b,c1,c2 (1≤a,b≤n,a≠b,1≤c2≤c1≤30000)表示在景点a与b 之间可以修公路,如果修一级公路,则需要c1的花费,如果修二级公路,则需要c2的花费。1≤n,m≤100000,0≤ai≤100000,1≤xi≤n,0≤wi≤10000,1≤li≤ri≤n

Output

一个数据,表示花费最大的公路的花费。

Sample Input

  1. 10 4 20
  2. 3 9 6 3
  3. 1 3 4 1
  4. 5 3 10 2
  5. 8 9 8 7
  6. 6 8 8 3
  7. 7 1 3 2
  8. 4 9 9 5
  9. 10 8 9 1
  10. 2 6 9 1
  11. 6 7 9 8
  12. 2 6 2 1
  13. 3 8 9 5
  14. 3 2 9 6
  15. 1 6 10 3
  16. 5 6 3 1
  17. 2 7 6 1
  18. 7 8 6 2
  19. 10 9 2 1
  20. 7 1 10 2

Sample Output

5

HINT

题解:

二分L,然后用kruskal来进行check,首先判断会不会超过K,搞一搞就出来了!

代码:

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstring>
  4. #include <ctime>
  5. #include <iostream>
  6. #include <algorithm>
  7. #include <set>
  8. #include <vector>
  9. #include <sstream>
  10. #include <queue>
  11. #include <typeinfo>
  12. #include <fstream>
  13. #include <map>
  14. typedef long long ll;
  15. using namespace std;
  16. //freopen("D.in","r",stdin);
  17. //freopen("D.out","w",stdout);
  18. #define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
  19. #define maxn 20001
  20. #define mod 10007
  21. #define eps 1e-9
  22. //const int inf=0x7fffffff; //无限大
  23. const int inf=0x3f3f3f3f;
  24. /*
  25.  
  26. */
  27. //**************************************************************************************
  28.  
  29. inline ll read()
  30. {
  31. int x=,f=;char ch=getchar();
  32. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  33. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  34. return x*f;
  35. }
  36. struct node{
  37. int x,y,c1,c2;
  38. }e[maxn];
  39. int fa[maxn];
  40. int n,k,m;
  41. int fin(int x)
  42. {
  43. return x==fa[x]?x:fa[x]=fin(fa[x]);
  44. }
  45. int jud(int x)
  46. {
  47. for(int i=;i<=n;i++)
  48. fa[i]=i;
  49. int cnt=;
  50. for(int i=;i<m;i++)
  51. {
  52. if(e[i].c1>x)continue;
  53. int p=fin(e[i].x),q=fin(e[i].y);
  54. if(fin(p)!=fin(q))
  55. {
  56. fa[q]=p;
  57. cnt++;
  58. }
  59. }
  60. if(cnt<k)return ;
  61. for(int i=;i<m;i++)
  62. {
  63. if(e[i].c2>x)continue;
  64. int p=fin(e[i].x),q=fin(e[i].y);
  65. if(fin(p)!=fin(q))
  66. {
  67. fa[q]=p;
  68. cnt++;
  69. }
  70. }
  71. if(cnt==n-)return ;
  72. return ;
  73. }
  74. int main()
  75. {
  76. n=read(),k=read(),m=read();
  77. for(int i=;i<=m-;i++)
  78. {
  79. e[i].x=read(),e[i].y=read(),e[i].c1=read(),e[i].c2=read();
  80. }
  81. int l=,r=,mid=(l+r)/;
  82. int ans=mid;
  83. while(l<=r)
  84. {
  85. mid=(l+r)/;
  86. if(jud(mid)){r=mid-,ans=mid;}
  87. else l=mid+;
  88. }
  89. printf("%d\n",ans);
  90. }

BZOJ 1196: [HNOI2006]公路修建问题 Kruskal/二分的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    BZOJ_1196_[HNOI2006]公路修建问题_kruskal+二分答案 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1196 分析: ...

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

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

随机推荐

  1. C# 链接webservice报错

    未处理 System.ServiceModel.EndpointNotFoundException  Message="没有终结点对可能接受消息的 http://192.168.0.168/ ...

  2. 一张图教会CSS3倒影

    分享 示例图片 在CSS3之前,想要实现示例图片这样的一个倒影效果一般只能通过处理图片的方式,而CSS3问世之后,想要实现这样的效果变得非常简单,只需一个CSS3属性就可以轻松实现了. 这就是今天所要 ...

  3. sqlserver中一些常用的函数总结

    去掉空格方面 LTRIM('内容'):去掉字符串左边的空格 RTRIM('内容'):去掉右边的空格 LTRIM(RTRIM('内容')):去掉字符串左边和右边的空格 REPLACE(‘内容’,' ', ...

  4. elasticsearch文档学习

    1.集群 节点(一个elasticsearch实体)  索引  主节点 :集群级别变更,新增或移除节点,索引:  主节点不参与文档级别搜索和变更. 分片(shard):一个完整的搜索引擎,lucene ...

  5. wpf设置某容器透明,而不应用到容器的子元素的方法

    以Border打比方: <Border.Background> <SolidColorBrush Opacity="0.4" Color="Black& ...

  6. Elasticsearch doc_value认识

    一.doc_value是什么 绝大多数的fields在默认情况下是indexed,因此字段数据是可被搜索的.倒排索引中按照一定顺序存放着terms供搜索,当命中搜索时,返回包含term的documen ...

  7. LeetCode699. Falling Squares

    On an infinite number line (x-axis), we drop given squares in the order they are given. The i-th squ ...

  8. html-图片热点和网页划区

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. mysql热数据加载管理

    5.6版本之后,提供了一个新特性来快速预热buffer_pool缓冲池.在my.cnf里面加入几个参数: innodb_buffer_pool_dump_at_shutdown = 1   --在关闭 ...

  10. HBase(四)HBase集群Shell操作

    一.进入HBase命令行 在你安装的随意台服务器节点上,执行命令:hbase shell,会进入到你的 hbase shell 客 户端 [admin@node21 ~]$ hbase shell S ...