树上启发式合并 (dsu on tree)

本文介绍了一种结合树形动态规划与重链剖分的算法,用于解决复杂树结构上的计数问题。通过预处理阶段的大小分治策略,算法能够有效地维护和更新节点的计数信息,实现O(log n)的时间复杂度。具体实现中,包括了维护最大值和累加操作的细节,以及如何处理轻重子节点的区别对待。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://blog.youkuaiyun.com/QAQ__QAQ/article/details/53455462https://blog.youkuaiyun.com/QAQ__QAQ/article/details/53455462

 

#include<bits/stdc++.h>
using namespace std;

const int maxn=1e5+5;

int n,col[maxn];
vector<int>g[maxn];

int cnt[maxn];
int sz[maxn],hs[maxn];
int isbig[maxn];

long long tot,ans[maxn];int mx;
void maintain(int x)
{
	if(cnt[x]>mx){mx=cnt[x];tot=x;}
	else if(cnt[x]==mx)tot+=x;
}
void prepare(int x,int f)
{
	sz[x]=1;
	for(auto to:g[x])
	{
		if(to==f)continue;prepare(to,x);
		sz[x]+=sz[to];if(sz[hs[x]]<sz[to])hs[x]=to;
	}
}
void add(int x,int f,int ad)
{
	cnt[col[x]]+=ad;maintain(col[x]); 
	for(auto to:g[x])
	{
		if(to==f||isbig[to])continue;
		add(to,x,ad);
	}
}
void dfs(int x,int f,int keep)
{
	for(auto to:g[x])
	{
		if(to==f||hs[x]==to)continue;
		dfs(to,x,0);//处理轻儿子 (不保留) 
	}
	if(hs[x])dfs(hs[x],x,1);//处理重儿子 (保留)
	isbig[hs[x]]=1;//重儿子已经算过了 打上标记 后面加轻儿子时不处理了 
	add(x,f,1);//暴力添加轻儿子 
	isbig[hs[x]]=0;//删除时全删 
	ans[x]=tot;
	if(!keep){add(x,f,-1);tot=mx=0;} //不保留就全删
} 

void solve()
{
	prepare(1,1);
	dfs(1,1,1);
}
int main()
{
	scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&col[i]);
	for(int i=1;i<n;i++)
	{
		int x,y;scanf("%d%d",&x,&y);
		g[x].push_back(y);g[y].push_back(x);
	}
	solve();
	for(int i=1;i<=n;i++)printf("%I64d ",ans[i]);
	return 0;
}

 

内容概要:《2024年中国城市低空经济发展指数报告》由36氪研究院发布,指出低空经济作为新质生产力的代表,已成为中国经济新的增长点。报告从发展环境、资金投入、创新能力、基础支撑和发展成效五个维度构建了综合指数评价体系,评估了全国重点城市的低空经济发展状况。北京和深圳在总指数中名列前茅,分别以91.26和84.53的得分领先,展现出强大的资金投入、创新能力和基础支撑。低空经济主要涉及无人机、eVTOL(电动垂直起降飞行器)和直升机等产品,广泛应用于农业、物流、交通、应急救援等领域。政策支持、市场需求和技术进步共推动了低空经济的快速发展,预计到2026年市场规模将突破万亿元。 适用人群:对低空经济发展感兴趣的政策制定者、投资者、企业和研究人员。 使用场景及目标:①了解低空经济的定义、分类和发展驱动力;②掌握低空经济的主要应用场景和市场规模预测;③评估各城市在低空经济发展中的表现和潜力;④为政策制定、投资决策和企业发展提供参考依据。 其他说明:报告强调了政策监管、产业生态建设和区域融合错位的重要性,提出了加强法律法规建设、人才储备和基础设施建设等建议。低空经济正加速向网络化、智能化、规模化和集聚化方向发展,各地应找准自身比较优势,实现差异化发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值