题目链接

二分答案+kruskal最小生成树判断

二分费用,用满足费用要求的边来生成树,判断能否生成树

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<string>
 5 #include<cstring>
 6 #include<cmath>
 7 #include<algorithm>
 8 #include<ctime>
 9 #include<queue>
10 #include<stack>
11 #include<map>
12 #include<set>
13 using namespace std;
14 struct bian
15 {
16     int u,v,c1,c2;
17 }bi[20020];
18 int getint()
19 {
20     int ret=0;char ch=getchar();
21     while(ch<'0'||ch>'9')ch=getchar();
22     while(ch>='0'&&ch<='9')ret*=10,ret+=ch-'0',ch=getchar();
23     return ret;
24 }
25 int n,k,m,ans,fa[10010];
26 int find(int x)
27 {
28     return x==fa[x]?x:fa[x]=find(fa[x]);
29 }
30 bool check(int x)
31 {
32     int sum=0;
33     for(int i=1;i<=n;i++)fa[i]=i;
34     for(int i=1;i<=m;i++)
35     {
36         if(bi[i].c1>x)continue;
37         int q=find(bi[i].u),w=find(bi[i].v);
38         if(q!=w)
39             fa[q]=w,sum++;
40     }
41     if(sum<k)return 0;
42     for(int i=1;i<=m;i++)
43     {
44         if(bi[i].c2>x)continue;
45         int q=find(bi[i].u),w=find(bi[i].v);
46         if(q!=w)
47             fa[q]=w,sum++;
48     }
49     if(sum!=n-1)return 0;
50     return 1;
51 }
52 int main()
53 {
54     n=getint(),k=getint(),m=getint();m--;
55     for(int i=1;i<=m;i++)
56         bi[i].u=getint(),bi[i].v=getint(),bi[i].c1=getint(),bi[i].c2=getint();
57     int l=1,r=30000;
58     while(l<=r)
59     {
60         int mid=(l+r)>>1;
61         if(check(mid))ans=mid,r=mid-1;
62         else l=mid+1;
63     }
64     printf("%d",ans);
65     return 0;
66 }

转载于:https://www.cnblogs.com/HugeGun/p/5151628.html

bzoj1196 [HNOI2006]公路修建问题相关推荐

  1. BZOJ1196: [HNOI2006]公路修建问题

    [传送门:BZOJ1196] 简要题意: 给出n个点,m-1条边,还有一个约束条件k,每条边可以是一级也可以是二级,一级或二级都需要费用,而一级的费用更高,选出n-1条边将n个点连起来,并且n-1条边 ...

  2. 【BZOJ1196】公路修建问题,二分+最小生成树

    [HNOI2006]公路修建问题 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1534 Solved: 879 Description OI isl ...

  3. bzoj 1196: [HNOI2006]公路修建问题(贪心+最小生成树)

    1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2657  Solved: 1511 [Submit][ ...

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

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

  5. [HNOI2006]公路修建问题 ——二分答案+krukal(蒟弱个人总结)

    题目链接 文章目录 题意: 题解: AC代码 题意: 题目要求我们在n个景点之间建立n-1条公路,在花费尽量少的情况下至少有k条一级公路,求花费最多的一条公路的最小花费 题解: 二分答案+kruska ...

  6. 【BZOJ 1196】[HNOI2006]公路修建问题

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 二分最后选的边中的最大值是多少. mid 则所有边权小于等于mid的边都可以用了. 那么我们要怎么选择呢? ->优先选择一级的 ...

  7. P2323-[HNOI2006]公路修建问题【并查集】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P2323 题目大意 有n个点,m条边,对于每条边修二级公路和一级公路修 ...

  8. 洛谷 P1265 公路修建 题解

    1 题面 公路修建 2 分析 这题特别的地方就是边多,5000×50005000\times 50005000×5000的边用kruscal空间不对. 主要空间瓶颈就是边的权是存不下来的,然而krus ...

  9. P1265 公路修建(Prim最小生成树)

    原题链接:公路修建 - 洛谷   思路:其实就是最小生生成树.想想看,如果有2的情况,即三个点ABC,离A最近的点为B,离B最近的点为C,离C最近的点为A.那么把三条边设为a,b,c,即要满足a &l ...

最新文章

  1. 121-Best Time to Buy and Sell Stock
  2. 1_HelloWorld
  3. 大工14春《计算机应用基础》在线测试2,大工14春《计算机应用基础》在线测试2...
  4. .net引用System.Data.SQLite操作SQLite
  5. 元器件基础知识--排阻命名
  6. 学习Apache Camel –实时索引推文
  7. Android学习随笔 -- draw9patch的使用
  8. Enterprise Suse运维
  9. Gram-Schmidt正交化
  10. SQL Server误区30日谈-Day28-有关大容量事务日志恢复模式的误区
  11. Idea中@Autowired 黄色波浪线问题,注入类显示红色波浪线,去除重复代码导致的波浪黄线,去除xml文件里sql语句的黄色行背景色,问题解决
  12. prince2证书有含金量吗?
  13. 数字图像处理_Matlab——车牌识别分析
  14. AirtestIDE1.2.13的安卓手机设置自动初始化功能
  15. MSP430 IO操作
  16. 2015-4-12分享的PDF
  17. 2010年5月27日俱乐部晚场活动,“iPhone应用成功经验分享”主题研讨活动
  18. 仅仅允许本校报考?多所985/211大学计算机第二学士学位
  19. 基于android平台多媒体播放器的设计与实现,基于Android的多媒体音乐播放器设计论文...
  20. 数据可视化之交通可视化

热门文章

  1. MAX2323E - 原理图系列
  2. DPKG命令与软件安装、APT
  3. 尝试用单元测试做spring注入调用service
  4. c++值传递,指针传递,引用传递以及指针与引用的区别
  5. javascript转换金额格式
  6. Hibernate CRUD操作
  7. phpMyAdmin安装
  8. 写一个函数DeleteRange删除单链表中结点的值在low 和high之间的结点
  9. Java内存溢出分析
  10. Spring2.5的新特性