首页 > 其他分享 >蓝桥杯2023年第十四届省赛A组-颜色平衡树

蓝桥杯2023年第十四届省赛A组-颜色平衡树

时间:2024-08-13 15:25:14浏览次数:5  
标签:ccnt sz cnt int 结点 son 蓝桥 2023 省赛

题目描述

给定一棵树,结点由 1 至 n 编号,其中结点 1 是树根。树的每个点有一个颜色 Ci。

如果一棵树中存在的每种颜色的结点个数都相同,则我们称它是一棵颜色平衡树。

求出这棵树中有多少个子树是颜色平衡树。

输入格式

输入的第一行包含一个整数 n ,表示树的结点数。

接下来 n 行,每行包含两个整数 Ci , Fi,用一个空格分隔,表示第 i 个结点的颜色和父亲结点编号。

特别地,输入数据保证 F1 为 0 ,也即 1 号点没有父亲结点。保证输入数据是一棵树。

输出格式

输出一行包含一个整数表示答案。

样例输入

6
2 0
2 1
1 2
3 3
3 4
1 4

样例输出

4

提示

编号为 1, 3, 5, 6 的 4 个结点对应的子树为颜色平衡树。

对于 30% 的评测用例,n ≤ 200,Ci ≤ 200 ;

对于 60% 的评测用例,n ≤ 5000,Ci ≤ 5000 ;

对于所有评测用例,1 ≤ n ≤ 200000,1 ≤ Ci ≤ 200000,0 ≤ Fi < i 。

整体思路

考虑树上启发式合并,求出子树大小 sz⁡、子树颜色出现次数的桶 cnt⁡,以及颜色出现次数的出现次数的桶 ccnt⁡,判断 cnt⁡(u)×ccnt⁡(cnt⁡(u)) 是否等于 sz⁡(u) 即可判断这棵子树是不是颜色平衡树。

#include <bits/stdc++.h>
#define endl '\n'
using namespace std;

const int N = 2e5 + 5;
int c[N], fa[N], sz[N], son[N];
int cnt[N], ccnt[N]; // 子树的颜色出现次数,颜色出现次数的出现次数 
vector<int> e[N];
int ans;

void add(int u, int son)
{
	ccnt[cnt[c[u]]]--;
	cnt[c[u]]++;
	ccnt[cnt[c[u]]]++;
	for(int v : e[u])
	{
		if(v != son)
		{
			add(v, son);
		}
	}
}

void sub(int u)
{
	ccnt[cnt[c[u]]]--;
	cnt[c[u]]--;
	ccnt[cnt[c[u]]]++;
	for(int v : e[u])
	{
		sub(v);
	}
}

void dfs1(int u)
{
	sz[u] = 1;
	for(int v : e[u])
	{
		dfs1(v);
		sz[u] += sz[v];
		if(sz[v] > sz[son[u]])
		{
			son[u] = v;
		}
	}
}

void dfs2(int u, int opt)
{
	for(int v : e[u])
	{
		if(v != son[u])
		{
			dfs2(v, 0);
		}
	}
	if(son[u])
	{
		dfs2(son[u], 1);
	}
	add(u, son[u]);
	if(cnt[c[u]] * ccnt[cnt[c[u]]] == sz[u])
	{
		ans++;
	}
	if(!opt)
	{
		sub(u);
	}
}

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	int n;
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		cin >> c[i] >> fa[i];
		if(fa[i] != 0)
		{
			e[fa[i]].push_back(i);
		}
	}
	dfs1(1);
	dfs2(1, 0);
	cout << ans << endl;
	return 0;
}

标签:ccnt,sz,cnt,int,结点,son,蓝桥,2023,省赛
From: https://blog.csdn.net/hehe_666888/article/details/141164939

相关文章

  • 基于django+vue基于web点餐小程序的个性化推荐演示录像22023【开题报告+程序+论文】计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在数字化时代,餐饮行业正经历着前所未有的变革。随着智能手机的普及和移动互联网技术的飞速发展,点餐小程序已成为连接消费者与餐厅的重要桥......
  • 中国住户调查主要数据(2000-2023).zip
    《ZG住户DC年鉴》是一本全面反映中国城乡居民收支、生产和生活状况的资料性年鉴。该年鉴收录了历年全国及分城乡居民收支与生活状况主要数据,以及分地区、按收入等份分组和按4个经济区域分组的住户收支与生活状况主要数据,还包括农村住户固定资产投资情况,以及住户调查其他数据......
  • 春秋云镜CVE-2023-38836
    打开靶场环境点击发现一个登陆框,弱口令试一下发现账号密码为admin,password随便点击点击Media发现这里可以上传文件上传木马试试<?php@eval($_POST["wjq"]);?>发现不能上传php文件php内容修改他的格式抓包绕过一下302就可以其实已经写进去了点一下4......
  • caxa电子图板2023下载-caxa工艺图表2023中文版下载安装教程
    CAXA是由镇江数字技术研究所有限公司自主研发的中文版CAD/CAM/CNC软件,具有以下特点:软件安装包http://rj.heihuyingyuan.com1.界面简洁,操作流畅,完全支持中文环境。2.集二维绘图、三维建模、CAM加工、CNC编程于一体。3.支持常见CAD文件格式的导入导出。4.包含丰富......
  • BR软件-中文版下载adobe Bridge2023软件下载安装教程BR2023
    软件安装包http://rj.heihuyingyuan.com这里分享几则关于Blender这款3D动画软件的有趣小故事:1.Blender最初是一家动画工作室开发的内部工具,后来以开源方式公开。2.Blender的logo是一只橙色的猴子头骨,这是开发者Renderfarm的昵称。3.早期Blender的界面被用户吐......
  • AutoCAD软件下载+安装+软件最新版2023中文版下载安装CAD2022
    纯净直装全版本(包含2023最新版)软件地址:rj.heihuyingyuan.comAutoCAD是美国Autodesk公司开发的一款computeraideddesign,即计算机辅助设计软件。它主要用于二维描绘和三维建模设计。AutoCAD的主要功能包括:1.二维绘图-可以绘制平面图形,进行几何构建和尺寸标注。......
  • AutoCAD Electrical2023 AutoCAD电气版软件下载安装-亲测可用
    AutoCADElectrical是Autodesk公司推出的一款专门用于电气工程设计的AutoCAD垂直解决方案。它在AutoCAD的CAD平台上,集成了强大的电气设计和智能化功能。纯净直装全版本(包含2023最新版)软件地址: http://321.pwAutoCADElectrical的主要功能包括:-电气符号库-内置完整......
  • 「实用软件」CAXA工艺图表2023最新下载附安装教程
    CAXA工艺图表2023是由中国航天科工信息技术研究院(CAXA)开发的一款专注于工艺设计和管理的软件。该软件旨在为制造业提供高效的工艺设计、工艺过程管理和工艺文件生成等功能,帮助企业提高生产效率、优化工艺流程和确保产品质量。软件介绍工艺设计:CAXA工艺图表2023提供了强大......
  • 题解:NOIP2023 天天爱打卡
    题解:NOIP2023天天爱打卡标签:线段树优化dp先考虑一个朴素的dp,\(f[i]\)表示前\(i\)天,第\(i\)天必打卡能得到的最大能量,有转移:\[f[i]=\max_{j=i-k+1}^{i}(val(j,i)-d\times(i-j+1)+\max_{p=1}^{j-2}f[p])\]\(val(j,i)\)表示第\(j\simi\)天完成的挑战.......
  • Aode Audition 2023软件安装教程
    Audition是一款强大的音频编辑软件,能够帮助用户实现各种音频剪辑和混音操作。下面是关于Audition2023软件的安装教程,供大家参考。步骤一:下载Audition通过全系列网站下载或者百度网盘下载都行步骤二:运行安装程序下载完成后,解压,用户需要运行Audition2023的安装程序。双击......