传送门

解题思路

  看到最大,肯定要先想二分答案。二分之后首先从小到大枚举\(k\)个小于\(lim\)的所有一级公路,然后用并查集连到一起,然后就在剩下的里面从小到大找n-1-k个二级公路,模仿最小生成树的形成过程还是用并查集维护。为什么这样是对的呢?我的想法是因为已经有了一个二分出来的限制,而且最后要使整张图联通,那么其实对于一个符合要求的环来说删去任意一条边都行,那么我们相当于在这个环上选上这个第一级公路,然后删掉一个二级公路,对于答案没有影响。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std;
const int MAXN = 10005; inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return f?x:-x;
} int n,fa[MAXN],m,k;
int ans; struct Data{
int x,y,c1,c2;
}data[MAXN<<1],tmp[MAXN<<1]; int get(int x){
if(x==fa[x]) return x;
return fa[x]=get(fa[x]);
} inline bool cmp(Data A,Data B){
return A.c1<B.c1;
} inline bool cmp_(Data A,Data B){
return A.c2<B.c2;
} inline bool check(int lim){
for(int i=1;i<=n;++i) fa[i]=i;
int num=0;
for(int i=1;i<=m;++i){
if(tmp[i].c2>lim) return false;
int u=get(tmp[i].x),v=get(tmp[i].y);
if(u!=v) num++,fa[u]=v;
if(num==k) break;
}
for(int i=1;i<=m;++i){
if(data[i].c1>lim) return false;
int u=get(data[i].x),v=get(data[i].y);
if(u!=v) num++,fa[u]=v;
if(num==n-1) break;
}
return true;
} int main(){
n=rd();k=rd();m=rd();m--;
for(register int i=1;i<=m;i++){
data[i].x=rd();data[i].y=rd();
data[i].c2=rd();data[i].c1=rd();
tmp[i]=data[i];
}
sort(data+1,data+1+m,cmp);sort(tmp+1,tmp+1+m,cmp_);
int l=1,r=30001,mid;
while(l<=r){
mid=(l+r)>>1;
if(check(mid)) ans=mid,r=mid-1;
else l=mid+1;
}cout<<ans;
return 0;
}

bzoj 1196: [HNOI2006]公路修建问题(二分+贪心)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 从零开始搭建系统2.4——Jenkins安装及配置

    1.安装wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat-stable/jenkins.reporpm --impo ...

  2. Perl 哈希

    Perl 哈希 哈希是 key/value 对的集合. Perl中哈希变量以百分号 (%) 标记开始. 访问哈希元素格式:${key}. 以下是一个简单的哈希实例: 实例 #!/usr/bin/per ...

  3. php-fpm 服务

    编译安装PHP的时候已经加入了--enable-fpm 在此基础上启动php-fpm服务 cp /usr/local/php/etc/php-fpm.conf.default /usr/local/p ...

  4. Delphi2007中正确调用SetWindowLong隐藏程序任务栏图标

    http://terony.blog.sohu.com/71347192.html‍ Delphi2007中正确调用SetWindowLong隐藏程序任务栏图标 标签: Delphi2007 SetW ...

  5. NX二次开发-UFUN体找边UF_MODL_ask_body_edges

    NX11+VS2013 #include <uf.h> #include <uf_ui.h> #include <uf_modl.h> #include <u ...

  6. NX二次开发-UFUN获得边的类型UF_MODL_ask_edge_type

    1 NX11+VS2013 2 3 #include <uf.h> 4 #include <uf_ui.h> 5 #include <uf_modl.h> 6 #i ...

  7. [NOI.AC] count

    思路: 考虑组合数学. 当所求中没有重复的时候,方案数就是\(C_{n + 1}^{k}\) 当有重复的时候... 设相等的数字之间的距离为\(len\) 当取0个数时,方案数就是\(C_{n - 1 ...

  8. Jsoup 学习笔记

    这里写自定义目录标题 Jsoup 学习笔记 解析 HTML 的字符串解析 URL 解析 本地文件解析 解析数据 DOM 解析 使用选择器解析 选择器概述 选择器组合用法 过滤用法 修改数据 HTML ...

  9. jquery实现点击按钮弹出层和点击空白处隐藏层

    昨天做项目遇到一个问题,和大家分享下,jquery实现点击按钮弹出层和点击空白处隐藏层的问题 if($('.autoBtn').length){                $('.autoBtn' ...

  10. JMeter安装和环境变量搭建

    下载安装Java JDK环境,设置环境变量 elasticsearch for windows:https://www.cnblogs.com/Neeo/articles/10368280.html ...