2020牛客暑期多校训练营(第十场)C Decrement on the Tree —— 思维,边访问转换为点访问,有丶东西

本文主要是介绍2020牛客暑期多校训练营(第十场)C Decrement on the Tree —— 思维,边访问转换为点访问,有丶东西,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

This way

题意:

现在有一棵树,每条边都有一个权值,现在你每次可以选择两个点使得路径上的所有边的权值-1,问你最少需要操作几次。并且依次做m个操作,每次都将一条边的权值改变,并且求最少操作次数。

题解:

在赛场上我就想着DP,树剖什么的,但是搞不出来。这想法有丶东西,由于将一条边的权值-1,那必然要将它连接的两个点访问一次。那么这道题可以变成:最少的访问点的次数。
那么假设一个点连了一条边,它访问次数就是这个边权。
如果连了多条边,那么可以知道如果和这个点相连的边的最大值*2>边的权值和,那么最大的这条边是无法被消掉的,所以这个点要多访问mx*2-v[i]次。否则,就有可能相互消掉,判一下总和的奇偶性即可。
最后由于每条边会被算两次,那么答案/2
tql/QAQ.jpg

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+5;
int x[N],y[N];
ll w[N],v[N];
multiset<ll,greater<ll> >s[N];
ll cal(int i){ll mx=*s[i].begin();if(mx*2>v[i])return mx*2-v[i];return v[i]%2;
}
int main()
{int n,m;scanf("%d%d",&n,&m);ll ans=0;for(int i=1;i<n;i++){scanf("%d%d%lld",&x[i],&y[i],&w[i]);v[x[i]]+=w[i],v[y[i]]+=w[i];s[x[i]].insert(w[i]),s[y[i]].insert(w[i]);}for(int i=1;i<=n;i++)ans+=cal(i);printf("%lld\n",ans/2);while(m--){int p;ll nv;scanf("%d%lld",&p,&nv);ans-=cal(x[p])+cal(y[p]);v[x[p]]-=w[p],v[y[p]]-=w[p];s[x[p]].erase(s[x[p]].find(w[p]));s[y[p]].erase(s[y[p]].find(w[p]));w[p]=nv;v[x[p]]+=w[p],v[y[p]]+=w[p];s[x[p]].insert(nv);s[y[p]].insert(nv);ans+=cal(x[p])+cal(y[p]);printf("%lld\n",ans/2);}return 0;
}

这篇关于2020牛客暑期多校训练营(第十场)C Decrement on the Tree —— 思维,边访问转换为点访问,有丶东西的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom

Java实现将byte[]转换为File对象

《Java实现将byte[]转换为File对象》这篇文章将通过一个简单的例子为大家演示Java如何实现byte[]转换为File对象,并将其上传到外部服务器,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言1. 问题背景2. 环境准备3. 实现步骤3.1 从 URL 获取图片字节数据3.2 将字节数组

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

Python使用PIL库将PNG图片转换为ICO图标的示例代码

《Python使用PIL库将PNG图片转换为ICO图标的示例代码》在软件开发和网站设计中,ICO图标是一种常用的图像格式,特别适用于应用程序图标、网页收藏夹图标等场景,本文将介绍如何使用Python的... 目录引言准备工作代码解析实践操作结果展示结语引言在软件开发和网站设计中,ICO图标是一种常用的图像

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术