首页 > 其他分享 >P10641 BZOJ3252 攻略

P10641 BZOJ3252 攻略

时间:2024-10-08 17:11:56浏览次数:1  
标签:BZOJ3252 结点 剖分 int son dfs2 攻略 树链 P10641

题目链接

简要题意

给定一个有 \(n\) 个结点的树,树有点权且点权为正整数。现选取 \(k\) 条从根结点出发到叶子结点的简单路径,求这些路径的并集上所有结点的点权之和的最大值。

主要算法

贪心,树链剖分,(线段树合并)

思路

  1. 一个显然的贪心,每次选一点点权和最大的链,再讲这条链清为0。正确性我不会证,但比较容易感性理解。
  2. 直接模拟的复杂度是 \(O(nk)\) 的显然不可接受。所以考虑如何优化,看到树看到链,就会想到树链剖分。
  3. 树链剖分后这些链是没有重复的点的,所以与题目同一场景多次观看不会得到重复价值一样,但我要保证贪心选的链一定是我划分的链,所以我们按当前点到叶子的路径上的点权和值重链剖分。
  4. 剖分完,排序即可
#include <bits/stdc++.h>
using namespace std;
const int mod=(1<<30),N=2e5+10;
int n,k,in[N],nxt[N],go[N],hd[N],son[N],w[N],tot,cnt,rt;
long long ans,jz[N],siz[N];
void add(int u,int v)
{
	nxt[++tot]=hd[u];go[tot]=v;hd[u]=tot;
	in[v]++;
	return;
}
void dfs1(int u,int f)
{
	for(int i=hd[u];i;i=nxt[i])
	{
		int v=go[i];
		dfs1(v,u);
		siz[u]=max(siz[u],siz[v]);
		if(siz[v]>siz[son[u]])son[u]=v;
	}
	siz[u]+=w[u];
}
void dfs2(int u)
{
	if(son[u])dfs2(son[u]);
	for(int i=hd[u];i;i=nxt[i])
	{
		int v=go[i];
		if(v==son[u])continue;
		jz[++cnt]=siz[v];
		dfs2(v);
	}
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>k;
	for(int i=1;i<=n;i++)cin>>w[i];
	for(int i=1;i<n;i++)
	{
		int u,v;cin>>u>>v;
		add(u,v);
	}
	for(int i=1;i<=n;i++)if(!in[i]) rt=i;
	dfs1(rt,0);
	dfs2(rt);
	jz[++cnt]=siz[rt];
	sort(jz+1,jz+cnt+1);
	for(int i=cnt;i>=cnt-k+1;i--)ans+=jz[i];//long long
	cout<<ans;
	return 0;
}

标签:BZOJ3252,结点,剖分,int,son,dfs2,攻略,树链,P10641
From: https://www.cnblogs.com/storms11/p/18452085

相关文章

  • jsp城市旅游景点攻略系统g0921(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,旅游线路,热门景点,风景图片,旅游攻略开题报告内容一、研究背景与意义随着旅游业的蓬勃发展,城市旅游景点攻略成为游客出行前的重要参考。然而,传统的攻略......
  • 面试攻略:精选50道大模型关键问题
    我精选50个大模型高频面试题,分享给大家简述GPT和BERT的区别讲一下GPT系列模型是如何演进的?为什么现在的大模型大多是decoder-only的架构?讲一下生成式语言模型的工作机理哪些因素会导致LLM的偏见?LLM中的因果语言建模与掩码语言建模有什么区别?如何减轻LLM中的幻觉现象?解释Cha......
  • 【python应用】最牛逼的Python API文档生成:Sphinx全攻略
    原创蔡大叔在Python开发的世界里,代码的文档化是至关重要的。它不仅帮助开发者理解代码的功能和用法,还能在团队协作中发挥巨大作用。Sphinx,作为一个强大的文档生成器,已经成为Python项目文档化的首选工具。本文将带你全面了解如何使用Sphinx为你的Python项目生成精美且实用的API......
  • MySQL 大数据量导入与导出全攻略
    《MySQL大数据量导入与导出全攻略》在实际的数据库应用中,我们经常会遇到需要处理大数据量的导入和导出的情况。无论是数据迁移、备份恢复,还是数据共享,高效地处理大数据量都是至关重要的。那么,MySQL是如何应对大数据量的导入和导出呢?让我们一起来探讨一下。一、大数据量导入导出......
  • 【python进阶攻略10】异常、lambda表达式
    异常异常处理是一种艺术,一旦你掌握,会授予你无穷的力量。我将要向你展示我们能处理异常的一些方式。最基本的术语里我们知道了try/except从句。可能触发异常产生的代码会放到try语句块里,而处理异常的代码会在except语句块里实现。这是一个简单的例子:try:file=open(......
  • 【python进阶攻略11】一行式、For - Else
    一行式本章节,我将向大家展示一些一行式的Python命令,这些程序将对你非常有帮助。简易WebServer你是否想过通过网络快速共享文件?好消息,Python为你提供了这样的功能。进入到你要共享文件的目录下并在命令行中运行下面的代码:#Python2python-mSimpleHTTPServe......
  • 图解Docker Compose 架构设计分析与全攻略:构建、扩展和管理你的容器(第一部分)
    DockerCompose是Docker官方编排工具,它允许用户通过简洁的YAML文件定义多容器的Docker应用程序。无论是开发者、系统管理员还是DevOps工程师,DockerCompose都能帮助轻松地管理复杂的服务堆栈。通过本文,将深入了解DockerCompose的强大功能和使用场景,探索如何利......
  • centos发送邮件教程:从配置到发送全攻略!
    centos发送邮件的方法?Centos配置邮件发送教程指南?无论是系统监控、自动化任务还是用户通知,邮件都是最直接和有效的沟通方式之一。AokSend将详细介绍如何在CentOS系统上配置和发送邮件,帮助你掌握这一关键技能。centos发送邮件:基本配置在开始centos发送邮件之前,首先需要进行......
  • 【2024精华版】从零开始的大模型LLM学习全攻略:一文掌握从入门到精通
    ChatGPT的出现在全球掀起了AI大模型的浪潮,2023年可以被称为AI元年,AI大模型以一种野蛮的方式,闯入你我的生活之中。从问答对话到辅助编程,从图画解析到自主创作,AI所展现出来的能力,超出了多数人的预料,让不少人惊呼:“未来是属于AI的”。AI大模型——成为互联网从业者必备技能。......
  • 《伊苏:塞尔塞塔的树海》遭遇Specialk32.dll缺失?《伊苏:塞尔塞塔的树海》Specialk32.dll
    《伊苏:塞尔塞塔的树海》作为一款深受玩家喜爱的动作角色扮演游戏,如果在游戏过程中遭遇Specialk32.dll缺失的问题,可能会导致游戏无法正常运行。针对这一问题,以下是一份全面的解决方案攻略:一、了解Specialk32.dll文件Specialk32.dll是一个动态链接库文件,它可能是游戏依赖的某......