题解【洛谷P2323】 [HNOI2006]公路修建问题
题解
跑两遍\(Kruskal\),第一次找出\(k\)条一级公路,第二次找出\(n - k - 1\)条二级公路,直接计算\(MST\)的权值之和即可。
代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cctype>
#define gI gi
#define itn int
#define File(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout)
using namespace std;
inline int gi()
{
int f = 1, x = 0; char c = getchar();
while (c < '0' || c > '9') {if (c == '-') f = -1; c = getchar();}
while (c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = getchar();}
return f * x;
}
int n, m, fa[20003], k, vis[20003];
struct OIer
{
int a, b, c1, c2, id;
} d[20003];
struct STO_Tham
{
int Id, Tham;
} ans[20003];
int getf(int u)
{
if (fa[u] == u) return u;
return fa[u] = getf(fa[u]);
}
int maxx = 900000000, maxy, tot;
inline bool cmp(OIer x, OIer y) {return x.c1 < y.c1;}
inline bool cmp1(OIer x, OIer y) {return x.c2 < y.c2;}
inline bool OrzTham(STO_Tham x, STO_Tham y) {return x.Id < y.Id;}
int main()
{
//File("P2323");
n = gi(), k = gi(), m = gi(); --m;
for (int i = 1; i <= m; i+=1)
{
d[i].a = gi(), d[i].b = gi(), d[i].c1 = gi(), d[i].c2 = gi(), d[i].id = i;
}
for (int i = 1; i <= n; i+=1) fa[i] = i;
sort(d + 1, d + 1 + m, cmp);
for (int i = 1; i <= m; i+=1)
{
int u = getf(d[i].a), v = getf(d[i].b);
if (u != v)
{
fa[u] = v;
ans[++tot].Id = d[i].id, ans[tot].Tham = 1;
maxy = max(maxy, d[i].c1);
if (tot == k) break;
}
}
sort(d + 1, d + 1 + m, cmp1);
for (int i = 1; i <= m; i+=1)
{
int u = getf(d[i].a), v = getf(d[i].b);
if (u != v)
{
fa[u] = v;
ans[++tot].Id = d[i].id, ans[tot].Tham = 2;
maxy = max(maxy, d[i].c2);
if (tot == n - 1) break;
}
}
sort(ans + 1, ans + 1 + tot, OrzTham);
printf("%d\n", maxy);
for (int i = 1; i < n; i+=1) printf("%d %d\n", ans[i].Id, ans[i].Tham);
return 0;
}
题解【洛谷P2323】 [HNOI2006]公路修建问题的更多相关文章
- 洛谷 P2323 [HNOI2006]公路修建问题 解题报告
P2323 [HNOI2006]公路修建问题 题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 思路: 二分答案 然后把每条能加的大边都加上,然后加小边 但在洛谷的题 ...
- 洛谷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 第 ...
- BZOJ 1196: [HNOI2006]公路修建问题 Kruskal/二分
1196: [HNOI2006]公路修建问题 Time Limit: 1 Sec Memory Limit: 162 MB 题目连接 http://www.lydsy.com/JudgeOnline ...
- 【最小生成树】BZOJ 1196: [HNOI2006]公路修建问题
1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1435 Solved: 810[Submit][Sta ...
- bzoj 1196: [HNOI2006]公路修建问题 二分+并查集
题目链接 1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1576 Solved: 909[Submit ...
随机推荐
- 嵊州D5T2 折纸 folding
折纸 folding [问题描述] 在非常紧张的 NOIP 考试中,有人喜欢啃指甲,有人喜欢转铅笔,有人喜欢撕 纸条,……而小 x 喜欢迷折纸. 现有一个 W * H 的矩形纸张,监考老师想知道,小 ...
- Blue Jeans[poj3080]题解
题目 Description - The Genographic Project is a research partnership between IBM and The National Geog ...
- 关于eclipse 项目导入不了 maven依赖的解决办法
1.首先确定你的项目是maven 项目 ,如果不是:项目右键Configure -->Convert to maven project. 2.在SVN导出的Maven项目,或以前不是用Maven ...
- java - synchronized与lock的区别
synchronized与lock的区别 原始构成 synchronized是关键字属于JVM层面 monitorenter(底层是通过monitor对象来完成,其实wait/notify等对象也依赖 ...
- 用cmd打开TXT(中文)文件,以及创建空文件,删除文件,改变输入法
编码 十进制 ut-8 65001 GBK 936 美国英语 437 windows cmd 默认为 ...
- 《深入理解java虚拟机》读书笔记十——第十一章
第十一章 晚期(运行期)优化 1.HotSpot虚拟机内的即时编译 解释器与编译器: 许多Java虚拟机的执行引擎在执行Java代码的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生 ...
- 全网最详细——Testlink在windows环境下搭建;提供环境下载
参考这篇文章,写的真不错https://www.jianshu.com/p/6c4321de26ea 工具下载 链接:https://pan.baidu.com/s/1_yzCIvsExbfzcRdl ...
- 斜率优化 DP
CF311B Cats Transport 暑假到现在终于过了这道题
- oracle sql 数据库之间导入数据
1.导入别的表 insert into EMPI_IDENTIFY select id,empiid, name||':' ||idcardno,'accidcardno','' from empi_ ...
- 栈的简单应用之中缀表达式转后缀表达式(C语言实现逆波兰式)
一.前言 普通人在书写计算式时会选择中缀表达式,这样符合人脑的认知习惯.可计算机处理时后缀表达式才能使处理速度更快,其原因是利用堆栈结构减少计算机内存访问.同时它也是一个很好锻炼栈这个数据结构的应 ...