洛谷 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的小朋友们释放出大量的僵尸,企 ...
随机推荐
- jmeter开发自己的sampler插件
1. 新建maven工程 2.pom文件引入jmeter的核心包 <project xmlns="http://maven.apache.org/POM/4.0.0" xml ...
- JS中String对象常用的方法
1. stringObject.charAt(index) 参数:index 必需,即字符在字符串中的下标. 返回值: 返回在指定位置的字符.返回的字符是长度为 1的字符串.(length属性 ...
- 【WXS全局对象】Number
属性: 名称 说明 Number.MAX_VALUE 返回JS中可表示的最大的数.它的近似值为 1.7976931348623157 x 10308. Number.MIN_VALUE 返回JS中可表 ...
- chorme打开网页的技巧
恢复之前关闭的网页 ctr l+ shift + t 打开之前不小心关闭的网页 临时书签 在设置书签中有 为打开的网页添加书签 的选项, 清除地址栏搜索记录 首先需要退出个人谷歌账户,账户上的搜索记录 ...
- New Year and Old Property :dfs
题目描述: Limak is a little polar bear. He has recently learnt about the binary system. He noticed that ...
- python3中使用python2中cmp函数出现错误
在python2中我们经常会使用cmp函数来比较一些东西,但是在python3中,你再来使用这个函数的时候,发现就报错了,提示找不到这个函数,这是为啥呢? 答:新版的python已经舍弃这种用法 而在 ...
- leetcode个人题解——#20 Valid Parentheses
class Solution { public: bool isValid(string s) { stack<char> brackts; ; i < s.size(); i++) ...
- 将System.Drawing.Bitmap转换为Direct2D.D2DBitmap
最近在尝试Direct2D编程,挺好玩的. 但是有时候还是会用到GDI+来生成图片,但D2D绘图需要用到自己的D2DBitmap类. 因此需要转换,查阅了下网上的资料,写了这么一个方法: using ...
- [leetcode-753-Open the Lock]
You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots: '0', '1', '2', '3', ...
- POJ 1113 Wall(计算几何の凸包)
Description Once upon a time there was a greedy King who ordered his chief Architect to build a wall ...