UVa1668/LA6039 Let’s Go Green

2024-08-23 06:36
文章标签 go let green uva1668 la6039

本文主要是介绍UVa1668/LA6039 Let’s Go Green,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UVa1668/LA6039 Let’s Go Green

  • 题目链接
  • 题意
  • 分析
  • AC 代码

题目链接

  本题是2012年icpc亚洲区域赛雅加达(Jakarta)赛区的题目

题意

  输入一棵n(2≤n≤100000)个结点的树,每条边上都有一个权值。要求用最少的路径覆盖这些边,使得每条边被覆盖的次数等于它的权值,如下图所示。
Let’s Go Green

分析

  本题和最小路径覆盖问题看着很像,但最小路径覆盖问题是有向图且要求每个点只在一条路径上。本题和UVa1664/LA6070 Conquer a New Region一个套路,表面是图论题,实际考的是数据结构——并查集。
  先分析本题的一个简单版本:如果树上只有一个点的度大于1,其余点的度都是1,最少的路径数是多少呢?计所有边权和为 s s s,最大边权为 x x x,思考一下可知最小路径数为 m a x ( ⌈ s 2 ⌉ , x ) max(\lceil \frac s 2 \rceil,x) max(⌈2s,x)
  现在解题思路就有了:考虑每个点 i i i关联的所有边,权和为 s i s_i si,最大边权为 x i x_i xi,则其关联边构成的子图最小路径数为 c i = m a x ( ⌈ s i 2 ⌉ , x i ) c_i=max(\lceil \frac {s_i} 2 \rceil,x_i) ci=max(⌈2si,xi)。枚举每条边 ( u , v , w ) (u,v,w) (u,v,w),用并查集将两端点各自关联的所有边子图依次合并就可以得出答案, u , v u,v u,v合并的子图最小路径数为 c u + c v − w c_u+c_v-w cu+cvw

AC 代码

#include <iostream>
using namespace std;#define N 100010
int u[N], v[N], w[N], x[N], s[N], f[N], n;int find(int x) {return x == f[x] ? x : f[x] = find(f[x]);
}int solve() {cin >> n;for (int i=1; i<=n; ++i) x[i] = s[i] = 0, f[i] = i;for (int i=1; i<n; ++i) {cin >> u[i] >> v[i] >> w[i]; s[u[i]] += w[i]; s[v[i]] += w[i];x[u[i]] = max(x[u[i]], w[i]); x[v[i]] = max(x[v[i]], w[i]);}for (int i=1; i<=n; ++i) s[i] = max(x[i], (s[i]+1) >> 1);int cc = 0;for (int i=1; i<n; ++i) {int x = find(u[i]), y = find(v[i]); f[x] = y; cc = s[y] += s[x] - w[i];}return cc;
}int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int t; cin >> t;for (int k=1; k<=t; ++k) cout << "Case #" << k << ": " << solve() << endl;return 0;
}

这篇关于UVa1668/LA6039 Let’s Go Green的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098623

相关文章

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

Go 1.23中Timer无buffer的实现方式详解

《Go1.23中Timer无buffer的实现方式详解》在Go1.23中,Timer的实现通常是通过time包提供的time.Timer类型来实现的,本文主要介绍了Go1.23中Timer无buff... 目录Timer 的基本实现无缓冲区的实现自定义无缓冲 Timer 实现更复杂的 Timer 实现总结在

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

Go路由注册方法详解

《Go路由注册方法详解》Go语言中,http.NewServeMux()和http.HandleFunc()是两种不同的路由注册方式,前者创建独立的ServeMux实例,适合模块化和分层路由,灵活性高... 目录Go路由注册方法1. 路由注册的方式2. 路由器的独立性3. 灵活性4. 启动服务器的方式5.

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更