【传送门:BZOJ1196】


简要题意:

  给出n个点,m-1条边,还有一个约束条件k,每条边可以是一级也可以是二级,一级或二级都需要费用,而一级的费用更高,选出n-1条边将n个点连起来,并且n-1条边中要有不少于k条一级边,求出能满足要求的图的最大边的最小值


题解:

  二分+最小生成树判断

  先二分最小值

  然后因为一级的费用总是比二级的高,所以只要有这条边一级的费用≤最小值就选一级边,不选二级边

  否则如果这条边一级的费用>最小值≥二级边就连二级边

  然后在最小生成树的时候统计有多少条一级边,最后进行判断即可


参考代码:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
struct cc
{int x,y,c1,c2;
}s[21000];
struct node
{int x,y,d;
}a[21000];int len;
int fa[11000];
int n,m,k;
int findfa(int x)
{if(x!=fa[x]) fa[x]=findfa(fa[x]);return fa[x];
}
bool cmp(node n1,node n2)
{return n1.d<n2.d;
}
bool check(int x)
{len=0;for(int i=1;i<=m;i++){if(s[i].c1<=x){len++;a[len].x=s[i].x;a[len].y=s[i].y;a[len].d=0;}else if(s[i].c2<=x){len++;a[len].x=s[i].x;a[len].y=s[i].y;a[len].d=1;}}if(len<n-1) return false;for(int i=1;i<=n;i++) fa[i]=i;int ans=0,tot=0;sort(a+1,a+len+1,cmp);for(int i=1;i<=len;i++){int fx=findfa(a[i].x),fy=findfa(a[i].y);if(fx!=fy){fa[fx]=fy;ans+=a[i].d;tot++;if(tot==n-1) break;}}if(tot<n-1) return false;if(tot-ans<k) return false;else return true;
}
int main()
{scanf("%d%d%d",&n,&k,&m);m--;for(int i=1;i<=m;i++) scanf("%d%d%d%d",&s[i].x,&s[i].y,&s[i].c1,&s[i].c2);int l=0,r=30000,mid,ans;while(l<=r){mid=(l+r)/2;if(check(mid)==true){ans=mid;r=mid-1;}else l=mid+1;}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/Never-mind/p/8525088.html

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

  1. bzoj1196 [HNOI2006]公路修建问题

    题目链接 二分答案+kruskal最小生成树判断 二分费用,用满足费用要求的边来生成树,判断能否生成树 1 #include<iostream> 2 #include<cstdio& ...

  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. 解决input[type=file]打开时慢、卡顿问题
  2. Linux+nfs配置开机启动,linux NFS配置:NFS开机自动启用及其原理
  3. 无法保存打印机设置 0x000006d9
  4. 视频播放的方法Android,详解Android App中使用VideoView来实现视频播放的方法
  5. Kaggle-泰坦尼克号
  6. 【Java】辨析JUnit4中的@AfterClass、@BeforeClass、@after、@before
  7. C#LeetCode刷题之#28-实现strStr()(Implement strStr())
  8. 新手使用PS心得-技巧
  9. pygame的游戏窗口退出办法
  10. BDL語法知識 变量的初始话
  11. 吴恩达深度学习笔记-布置机器学习项目(第4课)
  12. 数据库管理工具heidiSQL的基本使用
  13. 设计模式(三):“花瓶+鲜花”中的装饰者模式(Decorator Pattern)
  14. 华为云SNAT 操作(脚本执行)
  15. Win 8换徽标全面整合亮点功能大阅兵——乡巴佬下载
  16. php中常用的设计模式视频,PHP设计模式视频
  17. Aisen仿新浪微博客户端项目源码
  18. js ASCII字符串转16进制字符串显示
  19. 基于Spring Boot 2.0的IoT应用集成和使用CSE实践
  20. MySQL 示例数据库 employees 的导入与使用

热门文章

  1. python画代码-Python教程_Python画Mandelbrot集 代码
  2. 机器人编程语言python-机器人行业,10大流行编程语言对比
  3. python可以干嘛知乎-一行Python代码能做什么?
  4. python基本使用-python基本用法笔记合集
  5. python 命令行参数-python中命令行参数
  6. python 画三维函数图-Python画三维图-----插值平滑数据
  7. python哪一版好用-学习 Python 用哪本书好?
  8. python语言入门pdf-Python编程从入门到精通.pdf
  9. python编程自学难吗-为什么很多人不建议自学python编程呢?
  10. python编程课程价格-无锡Python程序开发课程