BZOJ_1196_[HNOI2006]公路修建问题_kruskal+二分答案
BZOJ_1196_[HNOI2006]公路修建问题_kruskal+二分答案
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1196
分析:
先把所有路都拆成两条。
二分答案mid,把大于mid的边除去,优先加一级公路,判断能不能加进去k条。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 10050
struct A{
int a,b,v;
}e[N<<2];
int n,m,k,fa[N],usex[N<<1],usey[N<<1];
int find(int x){
return fa[x]^x?fa[x]=find(fa[x]):x;
}
bool check(int x){
for(int i=1;i<=n;i++)fa[i]=i;
int ne=0;
for(int i=1;i<=m;i++){
if(e[i].v>x)continue;
int dx=find(e[i].a),dy=find(e[i].b);
if(dx!=dy){
fa[dx]=dy;
ne++;if(ne==n-1)return 1;
}
}if(ne<k)return 0;
for(int i=m+1;i<=2*m;i++){
if(e[i].v>x)continue;
int dx=find(e[i].a),dy=find(e[i].b);
if(dx!=dy){
fa[dx]=dy;ne++;if(ne==n-1)return 1;
}
}return 0;
}
int main(){
scanf("%d%d%d",&n,&k,&m);m--;
int x,y,z,w;
for(int i=1;i<=m;i++){
scanf("%d%d%d%d",&x,&y,&z,&w);
e[i].a=e[i+m].a=x;
e[i].b=e[i+m].b=y;
e[i].v=z;e[i+m].v=w;
}
int l=0,r=1<<30;
while(l<r){
int mid=l+r>>1;
if(check(mid))r=mid;
else l=mid+1;
}
printf("%d\n",l);
for(int i=1;i<=n;i++)fa[i]=i;
int ne=0;
for(int i=1;i<=m;i++){
if(e[i].v>l)continue;
int dx=find(e[i].a),dy=find(e[i].b);
if(dx!=dy){
fa[dx]=dy;
ne++;
usex[i]=1;
}
}
for(int i=m+1;i<=m+m;i++){
if(e[i].v>l)continue;
int dx=find(e[i].a),dy=find(e[i].b);
if(dx!=dy){
fa[dx]=dy;
ne++;
usey[i-m]=1;
}
}
for(int i=1;i<=m;i++){
if(usex[i])printf("%d 1\n",i);
else if(usey[i])printf("%d 2\n",i);
}
}
BZOJ_1196_[HNOI2006]公路修建问题_kruskal+二分答案的更多相关文章
- BZOJ 1196 [HNOI2006]公路修建问题(二分答案+并查集)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1196 [题目大意] 对于每条可能维修的公路可选择修一级公路或者二级公路,价值不同 要求 ...
- BZOJ 1196: [HNOI2006]公路修建问题 Kruskal/二分
1196: [HNOI2006]公路修建问题 Time Limit: 1 Sec Memory Limit: 162 MB 题目连接 http://www.lydsy.com/JudgeOnline ...
- BZOJ 1196 [HNOI2006]公路修建问题:二分 + 贪心生成树check(类似kruskal)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1196 题意: n个城市,m对城市之间可以修公路. 公路有两种,一级公路和二级公路,在第i对 ...
- BZOJ1196 [HNOI2006]公路修建问题 【二分 + Kruskal】
题目 OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织成立了,旨在建立O ...
- bzoj 1196: [HNOI2006]公路修建问题 二分+并查集
题目链接 1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1576 Solved: 909[Submit ...
- 洛谷 P2323 [HNOI2006]公路修建问题 解题报告
P2323 [HNOI2006]公路修建问题 题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 思路: 二分答案 然后把每条能加的大边都加上,然后加小边 但在洛谷的题 ...
- 1196/P2323: [HNOI2006]公路修建问题
1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2191 Solved: 1258 Descriptio ...
- 【最小生成树】BZOJ 1196: [HNOI2006]公路修建问题
1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1435 Solved: 810[Submit][Sta ...
- BZOJ 1196: [HNOI2006]公路修建问题( MST )
水题... 容易发现花费最大最小即是求 MST 将每条边拆成一级 , 二级两条 , 然后跑 MST . 跑 MST 时 , 要先加 k 条一级road , 保证满足题意 , 然后再跑普通的 MST . ...
随机推荐
- 类似Jquery ui 标签页(Tabs)
<div class="indexnew_tit"> <a href="javascript:;" class="on"& ...
- python函数与装饰器
一.名字空间与作用域 1.名字空间 名字空间:赋值语句创建了约束,用来存储约束的dict被称为名字空间 赋值语句的行为:1.分别在堆和栈中创建obj与name ...
- Web前端文件上传进度的显示
跟后台关系不大,主要是前端js实现,具体使用了XMLHttpRequest的ProgressEvent事件,可以参考MDN中的Using XMLHttpRequest https://develope ...
- Android Studio使用手记
1.官方的Tip and Tricks:http://developer.android.com/intl/zh-cn/sdk/installing/studio-tips.html 2.项目的目录树 ...
- Java基础知识总结【转+整合】
写代码: 1.明确需求.自己要做什么? 2.分析思路.怎么做? 3.确定步骤.每个思路部分用到哪些语句,方法和对象. 4.代码实现.用具体的java语言代码把思路体现出来. 学习新技术的四点: 1,该 ...
- js对象属性值为对象形式取值方式
console.log(rowData);//取带点的属性值 console.log(rowData['layoutPipegallery.pipegallerycode']);//取带点的属性值
- zlib 压缩输出缓冲区 overflow 问题
[TOC] 问题 后台服务传包太大时,我们框架可以使用 zlib 库对响应进行压缩:在这次服务调试过程中,使用 zlib compress2 以 Z_BEST_COMPRESSION 模式进行压缩时, ...
- 夜神模拟器链接Android studoid
在cmd 窗口输入:adb.exe connect 127.0.0.1:62001然后as就自动匹配了夜神经常忘记,特此提醒
- Spring Boot实战笔记(七)-- Spring高级话题(计划任务)
一.计划任务 从Spring3.1开始,计划任务在Spring中的实现变得异常的简单.首先通过在配置类注解@EnableScheduling来开启对计划任务的支持,然后在执行计划任务的方法上注解@Sc ...
- BlackArch安装(译文)
翻译:荒原之梦 原文地址:BlackArch Install 以下是译文: 该教程将会向你展示如何使用ISO和blackarch-installer安装BlackArch Linux. 这个教程中使用 ...