CF1468J Road Reform 题解

news2025/1/10 17:03:52

CF1468J Road Reform 题解

link

CF1468J Road Reform

题面翻译

给定一个有 n n n 个节点, m m m 条无向带权边的图,和一个参数 k k k,第 i i i 条边权值为 s i s_i si

现在你要保留这个图中的 n − 1 n-1 n1 条边使得这个图变成一棵树,然后你可以对这棵树上的任意边进行修改,每次修改可以使这个边的权值加上一或减去一。

现在你需要使所有边权的最大值正好等于 k k k,求所有保留方案的最小操作数。

T T T 组询问。

保证初始时给定的图满足任意两个点互相可达,没有重边或自环。

1 ≤ T ≤ 1 0 3 . 1\leq T\leq 10^3. 1T103.

1 ≤ n ≤ 2 × 1 0 5 ; n − 1 ≤ m ≤ min ⁡ ( n ( n + 1 ) 2 , 2 × 1 0 5 ) ; 1\leq n\leq2\times10^5;n-1\leq m\leq \min(\frac{n(n+1)}{2},2\times10^5); 1n2×105;n1mmin(2n(n+1),2×105);

∑ n , ∑ m ≤ 2 × 1 0 5 ; \sum n,\sum m\leq2\times10^5; n,m2×105;

1 ≤ k , s i ≤ 1 0 9 . 1\leq k,s_i\leq 10^9. 1k,si109.

题目描述

There are n n n cities and m m m bidirectional roads in Berland. The i i i -th road connects the cities x i x_i xi and y i y_i yi , and has the speed limit s i s_i si . The road network allows everyone to get from any city to any other city.

The Berland Transport Ministry is planning a road reform.

First of all, maintaining all m m m roads is too costly, so m − ( n − 1 ) m - (n - 1) m(n1) roads will be demolished in such a way that the remaining ( n − 1 ) (n - 1) (n1) roads still allow to get to any city from any other city. Formally, the remaining roads should represent an undirected tree.

Secondly, the speed limits on the remaining roads might be changed. The changes will be done sequentially, each change is either increasing the speed limit on some road by 1 1 1 , or decreasing it by 1 1 1 . Since changing the speed limit requires a lot of work, the Ministry wants to minimize the number of changes.

The goal of the Ministry is to have a road network of ( n − 1 ) (n - 1) (n1) roads with the maximum speed limit over all roads equal to exactly k k k . They assigned you the task of calculating the minimum number of speed limit changes they have to perform so the road network meets their requirements.

For example, suppose the initial map of Berland looks like that, and k = 7 k = 7 k=7 :

Then one of the optimal courses of action is to demolish the roads 1 1 1 4 4 4 and 3 3 3 4 4 4 , and then decrease the speed limit on the road 2 2 2 3 3 3 by 1 1 1 , so the resulting road network looks like that:

输入格式

The first line contains one integer t t t ( 1 ≤ t ≤ 1000 1 \le t \le 1000 1t1000 ) — the number of test cases.

The first line of each test case contains three integers n n n , m m m and k k k ( 2 ≤ n ≤ 2 ⋅ 1 0 5 2 \le n \le 2 \cdot 10^5 2n2105 ; n − 1 ≤ m ≤ min ⁡ ( 2 ⋅ 1 0 5 , n ( n − 1 ) 2 ) n - 1 \le m \le \min(2 \cdot 10^5, \frac{n(n-1)}{2}) n1mmin(2105,2n(n1)) ; 1 ≤ k ≤ 1 0 9 1 \le k \le 10^9 1k109 ) — the number of cities, the number of roads and the required maximum speed limit, respectively.

Then $ m $ lines follow. The $ i $ -th line contains three integers x i x_i xi , y i y_i yi and s i s_i si ( 1 ≤ x i , y i ≤ n 1 \le x_i, y_i \le n 1xi,yin ; x i ≠ y i x_i \ne y_i xi=yi ; 1 ≤ s i ≤ 1 0 9 1 \le s_i \le 10^9 1si109 ) — the cities connected by the i i i -th road and the speed limit on it, respectively. All roads are bidirectional.

The road network in each test case is connected (that is, it is possible to reach any city from any other city by traveling along the road), and each pair of cities is connected by at most one road.

The sum of $ n $ over all test cases does not exceed 2 ⋅ 1 0 5 2 \cdot 10^5 2105 . Similarly, the sum of m m m over all test cases does not exceed 2 ⋅ 1 0 5 2 \cdot 10^5 2105 .

输出格式

For each test case, print one integer — the minimum number of changes the Ministry has to perform so that the maximum speed limit among the remaining ( n − 1 ) (n - 1) (n1) roads is exactly k k k .

样例 #1

样例输入 #1

4
4 5 7
4 1 3
1 2 5
2 3 8
2 4 1
3 4 4
4 6 5
1 2 1
1 3 1
1 4 2
2 4 1
4 3 1
3 2 1
3 2 10
1 2 8
1 3 10
5 5 15
1 2 17
3 1 15
2 3 10
1 4 14
2 5 8

样例输出 #1

1
3
0
0

提示

The explanation for the example test:

The first test case is described in the problem statement.

In the second test case, the road network initially looks like that:

The Ministry can demolish the roads 1 1 1 2 2 2 , 3 3 3 2 2 2 and 3 3 3 4 4 4 , and then increase the speed limit on the road 1 1 1 4 4 4 three times.

In the third test case, the road network already meets all the requirements.

In the fourth test case, it is enough to demolish the road 1 1 1 2 2 2 so the resulting road network meets the requirements.

算法:最小生成树

思路:
首先看题。

题目中说:要在图中保留 n − 1 n−1 n1 条边,使它变成一棵树。

因此想到 最小生成树。

我这里用的是 Kruskal,需要用到并查集。

因此要注意并查集要初始化!

大家应该都知道 Kruskal 算法的流程是:先对边权从小到大排序,再枚举每一个 i i i,看一下所对应的 u u u v v v 是否在同一个集合内。如果不是,就可以选择这一条边。

做完最小生成树以后,我们要进行分类讨论:

计最小生成树中最大的边权为 t t t

t < k t<k t<k 时,遍历所有边,取与 k k k 差值最小的即可。

t > k t>k t>k 时,将所有边权与 k k k 的差值相加即可。

注意多测要清空即可。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=4e5+10,inf=2e9;
ll T,n,m,k,t,ans,ct,fa[N];
struct E{
    ll u,v,w;
}a[N];
bool cmp(E l,E r){
    return l.w<r.w;
}
void jian(){
    for(int i=1;i<=n;i++) fa[i]=i;
}
ll getfa(ll x){
    return fa[x]==x?x:fa[x]=getfa(fa[x]);
}
void kruskal(){
    jian();ct=t=ans=0;//多测不清空,爆零两行泪!
    sort(a+1,a+m+1,cmp);
    for(int i=1;i<=m;i++){
        ll x=getfa(a[i].u),y=getfa(a[i].v);
        if(x==y) continue;
        t=a[i].w,ans+=max(t-k,0ll),fa[x]=y;
        //因为边权是从小到大枚举的,所以当前值一定是最大的
    }
}
int main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cin>>T;
    while(T--){
        cin>>n>>m>>k;
        for(int i=1;i<=m;i++)
            cin>>a[i].u>>a[i].v>>a[i].w;
        kruskal();
        if(t<k){
            ans=inf;//不要忘记
            for(int i=1;i<=m;i++)
                ans=min(ans,abs(a[i].w-k));
        }//t>k的情况在做最小生成树的时候顺便求出来了
        cout<<ans<<"\n";
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1461300.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

306_C++_QT_创建多个tag页面,使用QMdiArea容器控件,每个页面都是一个新的表格[或者其他]页面

程序目的是可以打开多个styles文件(int后缀文件),且是tag样式的(就是可以切多个页面出来,并且能够单独关闭);其中读取ini文件,将其插入到表格中的操作,也是比较复杂的,因为需要保持RGB字符串和前面的说明字符串对齐 ini文件举例: [MainMenu] Foreground\Selected=&…

63-JQuery语法,选择器,事件,方法,遍历循环each

1.一个JS库,用js封装很多的方法放到一个文件里面,直接拿了用就可以 文件名带min是压缩过的不带min是没压缩过的 2.JQuery语法 通过选取HTML元素,并对选取的元素执行某些操作 基础语法:$(selector).action() <!-- 需要把JQuery文件先引入才能用 --><script src…

Project_Euler-06 题解

Project_Euler-06 题解 题目描述 两个公式 等差数列求和公式 i i i项&#xff1a; a i a_{i} ai​ 项数&#xff1a; n n n 公差&#xff1a; d d d 和&#xff1a; S n S_{n} Sn​ a n a 1 ( n − 1 ) d S n n ( a 1 a n ) 2 a_{n} a_{1} (n - 1)d\\ S_{n} \frac{n(a_…

L1-047 装睡-java

输入格式&#xff1a; 输入在第一行给出一个正整数N&#xff08;≤10&#xff09;。随后N行&#xff0c;每行给出一个人的名字&#xff08;仅由英文字母组成的、长度不超过3个字符的串&#xff09;、其呼吸频率和脉搏&#xff08;均为不超过100的正整数&#xff09;。 输出格…

百度地图海量点方案趟坑记录(百度地图GL版 + MapVGL + vue3 + ts)

核心需求描述 不同层级有不同的海量图标展示底层海量图标需要展示文字拖动、放大缩小都需要重新请求数据并展示固定地图中心点&#xff08;拖动、放大缩小&#xff0c;中心点始终在地图中心&#xff09; 示例图片&#xff1a;&#xff08;某些图片涉及公司数据&#xff0c;就未…

2万字带你看懂什么是智能座舱

现在市面上只要在卖的车&#xff0c;在推销出售的时候&#xff0c;如果不说这车有智能座舱&#xff0c;你都不好意思给别人推销&#xff0c;哪怕仅仅只有一个纯液晶显示的中控大屏&#xff0c;到底什么样的座舱才算是智能座舱&#xff1f; 座舱一词由飞机和船舶行业引进而来&am…

初识AXI总线

AXI是一种总线类型&#xff0c;具有高传输速率&#xff0c;高带宽&#xff0c;低时延等特性 AXI具有三种类型&#xff1a; 1.AXI_FULL:满足高性能内存映射&#xff08;memory-mapped&#xff09;需求 2.AXI_lite:不可突发传输 3.AXI_stream:面向数据流的传输 AXI的工作方式&a…

基于Java在线蛋糕店商城系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

【八股文】面向对象基础

【八股文】面向对象基础 面向对象和面向过程的区别 面向过程把解决问题的过程拆成一个个方法&#xff0c;通过一个个方法的执行解决问题。面向对象会先抽象出对象&#xff0c;然后用对象执行方法的方式解决问题。 创建一个对象用什么运算符?对象实体与对象引用有何不同? …

[AIGC] JVM内存结构

JVM内存结构 Java虚拟机&#xff08;JVM&#xff09;内存结构是Java内存管理的基础&#xff0c;并且与JVM的运行机制紧密相关。下面是一个JVM内存结构的示意图&#xff1a; JVM内存主要包括以下几个部分&#xff1a; 方法区&#xff08;Method Area&#xff09; 方法区也被称…

计算机视觉基础知识(十四)--深度学习开源框架

深度学习框架 Caffetensorflow框架是深度学习的库;编程时需要import 应用优势 框架的出现降低了入门的门槛;不需要从复杂的神经网络开始编写代码;根据需要,使用已有的模型;模型的参数经过训练得到;可以在已有的模型基础上增加自己的layer;在顶端选择自己的分类器和优化算法;…

2024最新版Redis安装使用指南

2024最新版Redis安装使用指南 Installation and Usage Guide to the Latest Redis in 2024 By JacksonML 1. 什么是Redis? The open-source, in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, an…

Linux 常用命令100+

Linux 运维/开发/测试 常用命令100 线上查询及帮助命令(2个) 命令功能说明示例man 命令查看普通命令帮助&#xff0c;命令的词典&#xff0c;更复杂的还有info&#xff0c;但不常用。rootbrLinux ~]#man lshelp 命令查看Linux内置命令的帮助&#xff0c;比如cd命令。[rootbrL…

【C++】初始化列表、static成员、友元、匿名对象、附练习题

文章目录 前言一、构造函数【初始化列表】1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 二、static成员2.1 概念2.2 特性 三、友元3.1 友元函数3.2 内部类 四、匿名对象4.1 拷贝对象时的一些编译器优化 五、再次理解类和对象六、练习题6.1 求123...n&#xff0c;要求不…

面试:正确率能很好的评估分类算法吗

正确率&#xff08;accuracy&#xff09; 正确率是我们最常见的评价指标&#xff0c;accuracy (TPTN)/(PN)&#xff0c;正确率是被分对的样本数在所有样本数中的占比&#xff0c;通常来说&#xff0c;正确率越高&#xff0c;分类器越好。 不同算法有不同特点&#xff0c;在不同…

算法项目(1)—— LSTM+CNN+四种注意力对比的股票预测

本文包含什么? 项目运行的方式(包教会)项目代码(在线运行免环境配置)不通注意力的模型指标对比一些效果图运行有问题? csdn上后台随时售后.项目说明 本项目实现了基于CNN+LSTM构建模型,然后对比不同的注意力机制预测股票走势的效果。首先看一下模型结果的对比: 模型MS…

十、计算机视觉-腐蚀操作

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、什么是腐蚀二、如何实现腐蚀三、腐蚀的原理 一、什么是腐蚀 在我们生活中常会见到腐蚀&#xff0c;比如金属表面受到氧化或其他化学物质的侵蚀&#xff0c;导致…

uniapp不同平台获取文件内容以及base64编码特征

前言 文件图片上传&#xff0c;客户端预览是很正常的需求&#xff0c;获取文件的md5特征码也是很正常的&#xff0c;那么&#xff0c;在uniapp中三种环境&#xff0c;h5, 小程序以及 app环境下&#xff0c;如何实现的&#xff1f; 参考&#xff1a; 如何在uniapp中读取文件Arr…

电动汽车充电负荷时空分布预测(matlab)

目录 1 主要内容 交通网-配电网交互模型 动态交通路网模型 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考《基于动态交通信息的电动汽车充电负荷时空分布预测》和《基于动态交通信息的电动汽车充电需求预测模型及其对配网的影响分析》文献模型&#xff0c;考虑…

Py之ydata-profilin:ydata-profiling的简介、安装、使用方法之详细攻略

Py之ydata-profilin&#xff1a;ydata-profiling的简介、安装、使用方法之详细攻略 目录 ydata-profiling的简介 1、主要特点 2、案例应用 (1)、比较数据集、对时序数据集进行分析、对大型数据集进行分析、处理敏感数据、数据集元数据和数据字典、自定义报告的外观、不同类型…