F. Gardening Friends(树的直径)

news2024/9/20 14:34:29

Problem - 1822F - Codeforces

两位朋友Alisa和Yuki在他们的花园里种了一棵有n个顶点的树。树是一个无向图,没有循环、回路或多重边。这棵树中的每条边都有一个长度为k。最初,顶点1是树的根。

Alisa和Yuki种植这棵树不仅仅是为了好玩,而是想要卖掉它。该树的成本定义为树上所有顶点中从根到顶点的最大距离。两个顶点u和v之间的距离是沿着从u到v的路径上边的长度之和。

女孩子们学过园艺课程,所以她们知道如何修改树。Alisa和Yuki可以花费c枚硬币将树的根移动到当前根的其中一个邻居。这个操作可以执行任意次数(可能为零)。请注意,树的结构保持不变;唯一的变化是哪个顶点是根。

女孩们想以最大的利润卖出这棵树。利润定义为成本减去操作总成本。利润是树的成本减去操作的总成本。

帮助女孩们,找出通过对树进行任意次数的操作(可能为零)所能获得的最大利润。

输入

第一行包含一个整数t(1≤t≤104)——测试用例的数量。

接下来是每个测试用例的描述。

每个测试用例的第一行包含整数n、k和c(2≤n≤2⋅105;1≤k,c≤109) ——树中顶点的数量,每条边的长度以及操作的成本。

测试用例的下面n−1行包含一对整数ui和vi(1≤ui,vi≤n)——图的边。这些边形成一棵树。

所有测试用例中n的值的总和不超过2×105。

输出

对于每个测试用例,输出一个整数——Yuki和Alisa可以获得的最大利润。

Example

Input

Copy

 

4

3 2 3

2 1

3 1

5 4 1

2 1

4 2

5 4

3 4

6 5 3

4 1

6 1

2 6

5 1

3 2

10 6 4

1 3

1 9

9 7

7 6

6 4

9 2

2 8

8 5

5 10

Output

Copy

2
12
17
32

题解:

这道题考察树的直径。

树的直径即树中两个最远点之间的路径。

树的直径有一个性质,距离任何一个点最远的点是直径两个端点的其中一个。

通过这个特点,我们可以通过两次DFS求出树的直径的两个端点,

然后分别以这两个端点为根,我们可以求出,每个点距离两个端点的距离,这两个距离之一就是此时距离最远的点的距离

对于代价,我们可以从1节点dfs求得

遍历所有点(此时的最远距离*k - 代价)的最大值即为答案

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
 #define int long long
typedef pair<int,int> PII;
typedef unsigned long long ULL;
const int N = 4e5 + 10;
int mod = 1e9 + 7;
vector<int> p[N];
int n,k,c;
int dep[N];
int cost[N];
int f,ff;
int dep1[N];
void dfs(int u,int fa)
{
	for(auto ne:p[u])
	{
		if(ne == fa)
		continue;
		cost[ne] = cost[u] + 1;
		dfs(ne,u);
	}
} 
void dfs1(int u,int fa)
{
	for(auto ne:p[u])
	{
		if(ne == fa)
		continue;
		dep[ne] = dep[u] + 1;
		if(dep[ne] > dep[f])
		{
			f = ne;
		}
		dfs1(ne,u);
	}
}
void dfs2(int u,int fa)
{
	for(auto ne:p[u])
	{
		if(ne == fa)
		continue;
		dep1[ne] = dep1[u] + 1;
		if(dep1[ne] > dep1[ff])
		{
			ff = ne;
		}
		dfs2(ne,u);
	}
}
void solve()
{
	cin >> n >> k >> c;
	for(int i = 1;i < n;i++)
	{
		int l,r;
		cin >> l >> r;
		p[l].push_back(r);
		p[r].push_back(l);
	}
	cost[1] = 0;
	dfs(1,0);
	
	dep[1] = 0;
	dfs1(1,0);
	
	dep1[f] = 0;
	dfs2(f,0);
	
	dep[ff] = 0;
	dfs1(ff,0);
	
	int ans = 0;
	for(int i = 1;i <= n;i++)
	{
		ans = max(max(dep[i],dep1[i])*k - cost[i]*c,ans);
	}
	cout << ans <<"\n";
	
	for(int i = 1;i <= n;i++)
	{
		p[i].clear();
		dep[i] = 0;
	}
}
signed main()
{
	ios::sync_with_stdio(0 );
	cin.tie(0);cout.tie(0);
	int t = 1;
	cin >> t;
	while(t--)
	{
		solve(); 
	}
}

 

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

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

相关文章

基于SpringBoot的流浪动物救助平台

1.引言 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于流浪动物救助平台所牵扯的管理及数据保存都是非常多的&#xff0c;例如首页、个人中心、会员管理、志愿者管理、流浪动物信息管理、领养信息管理、取消领养信息管理、志愿团队活动管理、志愿者申请表管理、…

【性能设计篇】数据库拓展

前两篇文章介绍了分布式存储的机制&#xff0c;为保证数据的高性能以及可拓展&#xff0c;采用分片/分区机制。为保证数据的高可用性&#xff0c;采用复制/镜像机制存储数据。一份数据存储多份。而这两种方式在数据中&#xff0c;就是分片/分区机制。分库分表/读写分离。 读写…

掌握这个关键技术,让你的APP开发事半功倍!——Flutter与其他方案的区别

Flutter动机是什么&#xff0c;解决啥痛点&#xff1f;优势在哪里&#xff1f; 介绍Flutter的历史背景和运行机制&#xff0c;并以界面渲染过程为例与你讲述其实现原理。 1 Flutter的历史背景 为不同的操作系统开发拥有相同功能的应用程序&#xff0c;开发人员只有两个选择&…

gitTortoise图形化工具下载步骤

一&#xff0c;简介 本文主要介绍如何下载安装gitTortoise图形化工具来管理和提交代码。 二&#xff0c;步骤介绍 2.1 安装包下载 下载地址&#xff1a;https://download.tortoisegit.org/tgit/ 打开后&#xff0c;界面如下&#xff1a; 点击选择最新的稳定release版本&am…

二分查找算法及实现

概念 二分查找算法也成为折半查找,是一种非常高效的工作于有序数组的查找算法. 实现 需求 现有一个有序数组 arr [1,2,3,4,5,6,7,8,9], 目标值target 2 ,要求返回目标值target在数组arr中的索引,没有则返回-1; 代码实现 private int binarySearch(int[] arr, int target)…

Android加快你的编译速度

工欲善其事&#xff0c;必先利其器。如果每次运行项目都要花费5-10分钟&#xff0c;那人的心态都要崩了。 Gradle构建流程 Gradle 的生命周期可以分为大的三个部分&#xff1a;初始化阶段&#xff08;Initialization Phase)&#xff0c;配置阶段&#xff08;Configuration Pha…

Linux学习之网络管理和配置文件

在CentOS 7中有两种网络配置方法&#xff1a;SysV&#xff08;也称为Sys 5&#xff09;和Systemd。 SysV的命令如下&#xff1a; service network start|stop|restart|status chkconfig --list network Systemd的命令如下&#xff1a; systemctl list-unit-files NetworkManage…

Linux->线程同步

目录 前言&#xff1a; 1 线程同步引入 2 条件变量 2.1 线程饥饿 2.2 条件变量接口 2.3 添加条件变量 3 生产者和消费者模型 前言&#xff1a; 本篇主要讲解了关于线程同步的相关知识&#xff0c;还有生产者和消费者模型的认识和使用。 1 线程同步引入 在讲解线程同步之…

【Unity3D】基于深度和法线纹理的边缘检测方法

1 前言 边缘检测特效中使用屏后处理技术&#xff0c;通过卷积运算计算梯度&#xff0c;检测每个像素周围像素的亮度差异&#xff0c;以识别是否是边缘像素&#xff1b;选中物体描边特效中也使用了屏后处理技术&#xff0c;通过 CommandBuffer 获取目标物体渲染后的模板纹理&…

学习spring: 1.引子

问题 我们来看一段代码: package org.malred;import org.malred.entity.Car; import org.malred.entity.Tire;/*** Hello world!**/ public class App {public static void main(String[] args) {Car car new Car();Tire lt new Tire();car.setLeftTire(lt);Tire rt new T…

状态估计器

文章目录 [toc] 1.状态空间模型1.1.连续状态空间模型1.2.离散状态空间模型 2.矩阵微积分3.二次规划4.概率论4.1.期望与方差4.2.独立事件4.3.向量随机变量4.4.噪声与协方差矩阵4.5.条件概率 5.最小二乘估计5.1.加权最小二乘估计5.2.递推最小二乘估计5.3.状态向量和协方差随时间变…

深入理解WebSocket,让你入门音视频

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。&#x1f60a; 座右铭&#xff1a;不想…

Android 使用okhttp监控网络数据

这里使用Okhttp写了一个demo来监听网络请求过程中的一系列数据&#xff0c;包括当前网络类型、请求体、响应体大小&#xff0c;url&#xff0c;请求方式&#xff0c;当然还有本次核心获取域名解析时长&#xff0c;建立连接时长&#xff0c;保持连接时长&#xff0c;请求总时长这…

《C++ Primer》--学习6

IO库 IO类 为了支持使用宽字符的语言&#xff0c;标准库定义了一组类型和对象来操纵 wchar_t 类型的数据。宽字符版本的类型和函数的名字以一个 w 开始。wcin wcout 和 wcerr 是分别对应 cin cout 和 cerr 的宽字符版本对象 IO类型之间的关系 类型 ifstream 和 istringstream…

Vuex 状态管理 —— 核心store

在上一篇当中讲到关于接口请求函数获取数据&#xff0c;拿到 response.data &#xff0c;简化调用&#xff0c;那么在拿到请求的响应数据之后呢&#xff1f;在前面讲到组件间的通信当中&#xff0c;如父子通信(父传子props,子传父$emit)以及组件与组件之前不能通过直接通信&…

【33】用 Docker 部署 Prometheus + Grafana 监控平台

一. Docker部署Prometheus 1.1 下载prom/prometheus镜像 docker pull prom/prometheus 1.2 启动prometheus容器 docker run -itd --nameprometheus -p 9090:9090 prom/prometheus 打开本地http://localhost:9090/ 说明启动成功 1.3 将容器的配置文件复制出来 docker cp pr…

深入理解深度学习——GPT(Generative Pre-Trained Transformer):在不同任务中使用GPT

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 GPT预训练语言模型作为一个标准的语言模型&#xff0c;其输入和输出是固定的&#xff0c;即输入一个词序列&#xff0c;输出该词序列的下一个词。《深入理解深度学习——GPT&#xff08;Generative Pre-Trained Transf…

GAMES101 笔记 Lecture06 Rasterization2(Antialiasing and Z-Buffering)

目录 Antialiasing(反走样)Sampling is Ubiquitous in Computer Graphics(采样在计算机图形学中无处不在)Sampling Artifacts(Errors or Mistakes or Inaccuracies) in Computer Graphics(在计算机图形学中采样的瑕疵)Jaggies(Staircase Pattern)锯齿Moire Pattern in Imaging(…

[进阶]TCP通信实现BS架构,网站开发的原理,线程池优化BS架构

代码演示如下&#xff1a; 服务端 public class Server {public static void main(String[] args) throws Exception{System.out.println("服务端开启&#xff01;");//1.创建ServerSocket的对象&#xff0c;同时为服务端注册端口。ServerSocket serverSocket new…

Wang tile(王浩瓷砖)算法解决贴图平铺重复问题

Wang tile(王浩瓷砖) 大家好&#xff0c;我是阿赵。这次来解决一个贴图重复的问题。 一、问题 做一篇很大面积的草地&#xff0c;一般思路是建立一个地面的面片&#xff0c;然后在材质球里面给他做一个Tiling平铺&#xff0c;增大重复次数。这样整个地面都可以被草地的贴图铺满…