洛谷 P2323 [HNOI2006]公路修建问题 解题报告
P2323 [HNOI2006]公路修建问题
题目描述

输入输出格式
输入格式:


在实际评测时,将只会有m-1行公路
输出格式:

思路:
二分答案
然后把每条能加的大边都加上,然后加小边
但在洛谷的题解中,没有采用二分答案而直接先处理k条大边,再处理小边的做法我认为是有问题的,欢迎证明或证伪。
Code:
#include <cstdio>
#include <algorithm>
const int N=10010;
const int M=20010;
struct node
{
int u,v,w,id;
bool friend operator <(node n1,node n2)
{
return n1.w<n2.w;
}
}e1[M],e2[M];
int n,k,m;
void init()
{
scanf("%d%d%d",&n,&k,&m);
for(int i=1;i<m;i++)
{
scanf("%d%d%d%d",&e1[i].u,&e1[i].v,&e1[i].w,&e2[i].w);
e2[i].u=e1[i].u;e2[i].v=e1[i].v;
e1[i].id=e2[i].id=i;
}
std::sort(e1+1,e1+m);
std::sort(e2+1,e2+m);
}
int f[N];
std::pair <int,int> ans[N];
int Find(int x){return f[x]=f[x]==x?x:Find(f[x]);}
void Merge(int x,int y){f[Find(y)]=Find(x);}
bool check(int len)
{
for(int i=1;i<=n;i++) f[i]=i;
int e=0,we=0;
for(int i=1;i<m;i++)
{
if(e1[i].w>len) break;
int u=e1[i].u,v=e1[i].v;
if(Find(u)!=Find(v))
{
Merge(u,v);
ans[++e].first=e1[i].id;
ans[e].second=1;
we++;
}
}
for(int i=1;i<m;i++)
{
if(e2[i].w>len) break;
int u=e2[i].u,v=e2[i].v;
if(Find(u)!=Find(v))
{
Merge(u,v);
ans[++e].first=e2[i].id;
ans[e].second=2;
}
}
return e==n-1&&we>=k;
}
void work()
{
int l=1,r=30000;
while(l<r)
{
int mid=l+r>>1;
if(check(mid))
r=mid;
else
l=mid+1;
}
check(l);
printf("%d\n",l);
std::sort(ans+1,ans+n);
for(int i=1;i<n;i++)
printf("%d %d\n",ans[i].first,ans[i].second);
}
int main()
{
init();
work();
return 0;
}
2018.8.2
洛谷 P2323 [HNOI2006]公路修建问题 解题报告的更多相关文章
- 洛谷P2323 [HNOI2006] 公路修建问题 [二分答案,生成树]
题目传送门 公路修建问题 题目描述 OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Associa ...
- 洛谷 P2323 [HNOI2006]公路修建问题
题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 输入输出样例 输入样例#1: 4 2 5 1 2 6 5 1 3 3 1 2 3 9 4 2 4 6 1 3 4 4 ...
- 1196/P2323: [HNOI2006]公路修建问题
1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2191 Solved: 1258 Descriptio ...
- 【洛谷P1265】公路修建
公路修建 题目链接 分析题意,可以发现,在(1)的条件下,(2)的情况是不会发生的, 于是直接求MST(Min Set Tree) 然而稠密图克鲁斯卡尔会TLE,建图还会爆空间, 所以用prime,用 ...
- P2323 [HNOI2006]公路修建问题
题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 输入输出样例 输入样例#1: 4 2 5 1 2 6 5 1 3 3 1 2 3 9 4 2 4 6 1 输出样例# ...
- 【MST】P2323 [HNOI2006]公路修建问题
Description 给定 \(n\) 个点 \(m - 1\) 条无向边,每条边有两种边权,贵一点的和便宜一点的.要求至少选择 \(k\) 条贵边使得图联通且花费最大的边权值最小. Input 第 ...
- 洛谷 P1852 [国家集训队]跳跳棋 解题报告
P1852 [国家集训队]跳跳棋 题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在\(a\),\(b\), ...
- 洛谷 P3224 [HNOI2012]永无乡 解题报告
P3224 [HNOI2012]永无乡 题目描述 永无乡包含 \(n\) 座岛,编号从 \(1\) 到 \(n\) ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 \(n\) 座岛排名,名次用 ...
- 洛谷 P3299 [SDOI2013]保护出题人 解题报告
P3299 [SDOI2013]保护出题人 题目描述 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企 ...
随机推荐
- 「日常训练」Girls and Boys(HDU-1068)
题意 有n个同学,给出同学之间的爱慕关系,选出一个集合使得集合中的人没有爱慕关系.问能选出的最大集合是多少. 分析 二分图的最大独立集. 最大独立集的意思是,在图中选出最多的点,使他们两两之间没有边, ...
- Appium的环境搭建和配置
Appium的环境搭建和配置 一.安装Nodejs 下载nodejs安装包(https://nodejs.org/en/download/)安装 下载后,双击安装文件,按提示来安装. 测试安装是否成功 ...
- Jenkins 配置邮箱 530Authentication required ,535 uthentication failed 的解决方法
错误 解决方法 530 Authentication required 需要展开SMTP认证,输入SMTP server能识别的用户信息 535 authentication failed 输 ...
- leetcode-位1的个数(位与运算)
位1的个数 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量). 示例 : 输入: 11 输出: 3 解释: 整数 11 的二进制表示为 00000 ...
- [C++]STL中的容器
C++11 STL中的容器 一.顺序容器: vector:可变大小数组: deque:双端队列: list:双向链表: forward_list:单向链表: array:固定大小数组: string: ...
- 365. Count 1 in Binary【LintCode java】
Description Count how many 1 in binary representation of a 32-bit integer. Example Given 32, return ...
- 单机部署Fastfds+nginx
一.环境 centos6.8 x64 IP:192.168.134.128 所需软件包: libfastcommon-1.0.7.zip,FastDFS_v5.05.tar.gz,nginx-1.7 ...
- C++字符串拼接和输入
一 .char类型字符串以空字符结尾 1.以空字符结尾,空字符被写作\0,其ASCII码为0,用来标记字符串的结尾. char dog[4]={'a','b','c','d'} //不是一个字符串 ...
- Apache--Override参数详解
1 AuthConfig 允许使用所有的权限指令,他们包括AuthDBMGroupFile AuthDBMUserFile AuthGroupFile AuthName AuthTypeAut ...
- POJ 2653 Pick-up sticks(线段判交)
Description Stan has n sticks of various length. He throws them one at a time on the floor in a rand ...