UVa1668/LA6039 Let’s Go Green

news2024/11/25 12:26:24

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;
}

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

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

相关文章

JAVA家政服务独立多端平台服务系统小程序源码

解锁现代生活新方式✨ —— "家政服务独立用户多端平台系统"全攻略&#x1f3e0; &#x1f680;【开篇&#xff1a;告别繁琐&#xff0c;拥抱智能家政新时代】 在这个快节奏的时代&#xff0c;谁不想回家就能享受一份宁静与舒适呢&#xff1f;但忙碌的工作、琐碎的…

算法日记day 45(单调栈之每日温度|接雨水)

一、每日温度 题目&#xff1a; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来…

基本数据类型 --- 浮点型

float的机器码表示&#xff1a; 一个float数据 (pow(-1, sign) fraction) * pow(2, exponent - 127) 由上图&#xff0c;可得&#xff1a; (pow(-1, sign) fraction) * pow(2, exponent - 127) ( 1 2^(-2) ) * pow(2, 124-127) 0.15625 其他文章&#xff1a; https://b…

Go第一个程序

package mainimport "fmt"func main() {str : "hello go"fmt.Println(str) }上述很简单&#xff0c;如何使用os包获取命令行参数呢&#xff1f; package mainimport ("fmt""os" )func main() {fmt.Println(os.Args)str : "hello…

typora激活流程

1.安装typora Typora中文官网&#xff1a;Typora 官方中文站 Typora官网&#xff1a;https://typora.io/releases/all 2.打开软件安装位置 找到路径Typora\resources\page-dist\static\js的js文件&#xff0c;使用记事本编辑打开 替换 CtrlF查找 e.hasActivated"true&…

python-逆序数(赛氪OJ)

[题目描述] 在一个排列中&#xff0c;如果一对数的前后位置与大小顺序相反&#xff0c;即前面的数大于后面的数&#xff0c;那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。比如一个元素个数为 4 的数列&#xff0c;其元素为 2,4,3,1&#xff0c;则 (2,…

ubuntu20 vmware硬盘空间不够,进行扩容,实操成功!

背景 在编译mysql源码之前只给虚拟机分配了20G的空间&#xff0c;但是实际编译过程中&#xff0c;发现很快20G空间就被用完了&#xff0c;于是需要对已分配空间的虚拟机进行扩容至50G。 如何进行扩容&#xff1f; 注意首先需要在extended那一块先resize&#xff0c;把unloca…

H3C M-LAG与双活网关接口结合应用场景实验

H3C M-LAG与双活网关接口结合应用场景实验 实验拓扑 ​​ 实验需求 此实验需要在模拟器中使用交换机型号 S6850SW3 为接入交换机,连接 PC1 在 VLAN 10,连接 PC2在 VLAN 20,SW3 双上行连接到两台核心交换机SW1 和 SW2 为核心交换机,配置 M-LAG,并作为 VLAN 10 和 VLAN 2…

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 07数据中心的边缘

本章将帮助你回答以下问题 可以用哪些方式将 Clos 拓扑连接到外部网终?边缘部署路由协议的最佳实践是什么?企业应如何处理混合云中的连接? 连接模型 为什么要连接到外部世界? 数据中心连接到外部世界的原因很多。如果你要对外提供某种服务(例如搜索服务广告推荐系统或内…

C语言:深入理解文件操作

目录 1. 为什么使用文件&#xff1f; 2. 什么是文件&#xff1f; 2.1 程序文件 2.2 数据文件 2.3 文件名 3. 二进制文件和文本文件&#xff1f; 3.1测试代码&#xff1a; 4. 文件的打开和关闭 4.1 流和标准流 4.1.1 流 4.1.2 标准流 4.2 文件指针 4.3 文件的打开…

【刷题笔记】二叉树2

1 二叉树的层序遍历 上一期我们讲了关于二叉树的前序、中序以及后序遍历的相关内容。然而&#xff0c;还存在一种遍历方式&#xff0c;这种方式非常符合我们人类的正常思维&#xff0c;可以求解很多树相关的问题&#xff0c;比较暴力——二叉树的层序遍历。 二叉树的层序遍历与…

股票买卖的思路与代码

题目 1302&#xff1a;股票买卖 时间限制: 1000 ms 内存限制: 65536 KB 提交数:8660 通过数: 4290 【题目描述】 最近越来越多的人都投身股市&#xff0c;阿福也有点心动了。谨记着“股市有风险&#xff0c;入市需谨慎”&#xff0c;阿福决定先来研究一下简化版的股…

文华软件自动画线 参数自调 多空波段变色线(源码自取)

编写思路 想要随意输入一个点位&#xff0c;即可按照这个点位自动画线&#xff0c;此线可以多空变色&#xff0c;上下突破线时箭头提示并发出声音预警。 代码函数重点解析 A、DRAWSL 绘制直线&#xff08;段&#xff09;。 用法&#xff1a; DRAWSL(COND,DATA,SLOPE,LEN,E…

【OpenCV】111

1 新建项目 新建项目&#xff0c;路径不要出现中文 文件夹名称 添加解释器&#xff0c;添加本地解释器 这样就创建好了一个文件夹&#xff0c;然后像我这样一级一级向下分&#xff0c;细分文件夹

TinyC编译器5—词法分析

1.词法分析的基本概念 词法分析也称为分词&#xff0c;此阶段编译器从左向右扫描源文件&#xff0c;将其字符流扫描分割成一个个的词&#xff08;记号、token&#xff09;。所谓token&#xff0c;就是源文件中不可再进一步分割的一串字符&#xff0c;类似英语中的单词&#xf…

Transformer大模型在训练过程中所需的计算量

目录 简介计算需求参数与数据集的权衡计算成本的工程意义内存需求推理模型权重总推理内存训练模型参数优化器状态梯度激活值和批大小总训练内存分布式训练分片优化器3D 并行分片优化器 + 3D 并行参考简介 许多关于Transformer语言模型的基本且重要的信息都可以用相当简单的方式…

基于微信小程序的大用户心理咨询系统设计与实现---附源码99040

目录 1 绪论 1.1 研究背景 1.2研究现状 1.3论文结构与章节安排 2 基于微信小程序的大用户心理咨询系统设计与实现分析 2.1 可行性分析 2.2 系统功能分析 2.3 系统用例分析 2.4 系统流程分析 2.5本章小结 3 基于微信小程序的大用户心理咨询系统设计与实现总体设计 3.…

网站首页配置-记录部分错误

目录 错误问题1: 解决方案: 错误问题2: 解决方案&#xff1a; 错误问题3&#xff1a; 解决方案&#xff1a; 错误问题4&#xff1a; 解决方案&#xff1a; EL的作用: 错误问题1: 解决方案: 里面的代码写错&#xff0c;cateSecond应该写成categorySecond 错误问题2: 解…

toRef 与 toRefs

在 ref函数与reactive函数的对比 这一篇博文中&#xff0c;我们从使用角度对比了 ref 与 reactive 的区别&#xff0c;最终得出结论是&#xff0c; 通过 ref 定义的数据&#xff0c;在 js脚本中使用需要 xxx.value &#xff0c;在模板中会自动解包&#xff0c;可以直接使用通过…

WIN 10 添加右键菜单(VSCode 打开当前目录)

WIN 10 添加右键菜单&#xff08;VSCode 打开当前目录&#xff09; 前言最终效果操作步骤 前言 每次打开代码都需要先打开 VSCode&#xff0c;再选择最近打开的项目或者浏览打开项目&#xff0c;感觉比较难找。所以自己添加了右键命令。 最终效果 操作步骤 cmd 打开注册表 找…