第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 E 题

news2025/1/22 9:12:15

颜色平衡树

  • ==问题描述==
  • ==格式输入==
  • ==格式输出==
  • ==样例输入==
  • ==样例输出==
  • ==评测用例规模与约定==
  • ==解析==
  • ==参考程序==

问题描述

在这里插入图片描述
在这里插入图片描述


格式输入

输入的第一行包含一个整数 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 。


解析

十四届蓝桥


参考程序

#include<bits/stdc++.h>
using namespace std;
const int N = 200000 + 7;
int col[N], f, n, ans;
struct node {
    int to, next;
}edge[N];
int head[N], cnt, num[N];
inline void add(int x, int to) {
    edge[++cnt].to = to;
    edge[cnt].next = head[x];
    head[x] = cnt;
}
int dfn, in[N], out[N], belong[N], newcol[N];
unordered_map<int, int> mp;
inline void dfs(int x) {
    in[x] = ++dfn;
    for (int i = head[x]; i; i = edge[i].next) {
        int y = edge[i].to;
        dfs(y);
    }
    out[x] = dfn;
}
struct mo {
    int l, r;
}q[N << 1];
inline bool cmp(const mo& a, const mo& b) {
    return belong[a.l] == belong[b.l] ? a.r < b.r : a.l < b.l;
}
inline void del(int x) {
    int c = newcol[x];
    mp[num[c]]--;
    if (mp[num[c]] == 0) {
        mp.erase(num[c]);
    }
    num[c]--;
    if (num[c]) mp[num[c]]++;
}
inline void add(int x) {
    int c = newcol[x];
    if (num[c]) mp[num[c]]--;
    if (mp[num[c]] == 0) {
        mp.erase(num[c]);
    }
    num[c]++;
    mp[num[c]]++;
}
inline void Case_Test() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> col[i] >> f;
        if (f) add(f, i);
    }
    dfs(1);
    for (int i = 1; i <= n; i++) {
        // cout << i << " : [" << in[i] << "," << out[i] << "]" << endl;
        q[i].l = in[i], q[i].r = out[i];
        newcol[in[i]] = col[i]; newcol[out[i]] = col[i];// dfn改变原来位置,需要用newcol
    }
    int sq = sqrt(dfn);// 根号
    for (int i = 1; i <= dfn; i++) {
        belong[i] = (i - 1) / sq + 1;// 预处理
    }
    sort(q + 1, q + 1 + n, cmp);// 查询区间排序
    int l = 1, r = 0;// 莫队初始化
    for (int i = 1; i <= n; i++) {
        while (l < q[i].l) del(l++);
        while (l > q[i].l) add(--l);
        while (r < q[i].r) add(++r);
        while (r > q[i].r) del(r--);// 莫队四种转移
        if (mp.size() == 1) ans++;
    }
    cout << ans;
}
int main()
{
    Case_Test();
    return 0;
}

以个人刷题整理为目的,如若侵权,请联系删除~

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

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

相关文章

动态内存管理【下篇】

文章目录⚙️5.C/C程序的内存开辟⚙️6.柔性数组&#x1f514;6.1.柔性数组的特点&#x1f514;6.2.柔性数组的使用⚙️5.C/C程序的内存开辟 C/C程序内存分配的几个区域&#xff1a; &#x1f534;1.栈区&#xff08;stack&#xff09;&#xff1a;在执行函数时&#xff0c;函数…

2023软件测试最难求职季,哪些测试技能更容易拿到offer?

在一线大厂&#xff0c;没有测试这个岗位&#xff0c;只有测开这个岗位。这几年&#xff0c;各互联网大厂技术高速更新迭代&#xff0c;软件测试行业也正处于转型期。传统的功能测试技术逐步淘汰&#xff0c;各种新的测试技术层出不穷&#xff0c;测试人员的薪资也水涨船高。与…

【刷题之路】LeetCode 2389. 和有限的最长子序列

【刷题之路】LeetCode 2389. 和有限的最长子序列一、题目描述二、解题1、方法——二分法1.1、思路分析1.2、代码实现一、题目描述 原题连接&#xff1a; 2389. 和有限的最长子序列 题目描述&#xff1a; 给你一个长度为 n 的整数数组 nums &#xff0c;和一个长度为 m 的整数数…

UR5构型机械臂正逆运动学

前言 整理之前的一个项目&#xff0c;当时看着一个博客硬生生计算了差不多一个星期。尝试用MatLab符号推导工具箱化简一部分工作。我使用的大象机器人一款开源入门级协作机器人产品myCobot&#xff0c;开发文档十分完善&#xff0c;但是有部分技术没有开源&#xff0c;如正逆运…

数据分析师 ---- SQL强化(2)

数据分析师 ---- SQL强化(2) 文章目录数据分析师 ---- SQL强化(2)题目一&#xff1a;SQL实现文本处理题目二&#xff1a;语种播放量前三高所有歌曲总结&#xff1a;题目一&#xff1a;SQL实现文本处理 现有试卷信息表examination_info&#xff08;exam_id试卷ID, tag试卷类别,…

钢铁侠材质制作——2、线条轮廓部分的制作

钢铁侠Unlit光照Shader&#xff0c;三种效果变化返回目录大家好&#xff0c;我是阿赵&#xff0c;这里是钢铁侠材质制作第二部分&#xff0c;线条轮廓部分的制作 为了实现这个效果&#xff0c;可以把细节拆分成以下几个部分&#xff1a; 1、轮廓光 1.效果分析 这是一个很基…

时间序列 | MATLAB实现CNN-BiLSTM-Attention时间序列预测

时间序列 | MATLAB实现CNN-BiLSTM-Attention时间序列预测 目录时间序列 | MATLAB实现CNN-BiLSTM-Attention时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现CNN-BiLSTM-Attention时间序列预测&#xff0c;CNN-BiLSTM结合注意力机制时间序列预…

语言模型ChatGPT,为什么能引领各行各业的AI技术革命

为什么ChatGPT这样一个语言模型的发展能引发所有行业的AI技术革命呢&#xff1f; 答案就在于它能理解我们的自然语言&#xff0c; 并能将我们的语言转换成计算机能够完全理解的特征。 自然语言与计算机理解 ChatGPT之所以能引领技术革命&#xff0c;关键在于它能理解我们的…

GPT、科技、人类的生产、知识与未来(上)

本文将继续结合GPT探讨人工智能技术升级可能对人类社会带来的影响。主要还是侧重历史、社会、文化、经济、政治等角度。 问题的提出&#xff1a;ChatGPT等工具会提高人的工作效率和产出。但它会让人类使用者自身变得更“聪明”&#xff0c;还是“更笨”&#xff1f;更“强”&am…

CVE-2017-16995 Ubuntu 16.04 漏洞复现

目录 1.背景介绍 2.目的&#xff1a; 3.环境 4.操作&#xff1a; 工具下载地址&#xff1a; 1.背景介绍 Ubuntu 16.04版本存在本地提权漏洞&#xff0c;该漏洞存在于Linux内核带有的eBPF bpf(2)系统调用中&#xff0c;当用户提供恶意BPF程序使eBPF验证器模块产生计算错误&…

JDBC03-批处理、连接池、DBUtils、事物、DAO通用方法

1. 封装 JDBCUtils 【关闭、得到连接】 1.1 说明 1.2 代码实现 工具类 JDBCUtils package com.hspedu.jdbc.utils;import java.io.FileInputStream; import java.io.IOException; import java.sql.*; import java.util.Properties; /** * 这是一个工具类&#xff0c;完成 my…

【Microsoft Edge】安装详解

文章目录一、下载 Edge1.1 下载网址1.2 版本分类二、安装 Edge2.1 可能的异常情况2.2 安装目录详解2.2.1 Edge 非 Canary 版2.2.2 Edge Canary 版一、下载 Edge Edge 的安装包其实是一个简易安装包&#xff0c;里面封装了一个安装的配置文件&#xff0c;提供真正的安装包下载链…

FreeRTOS 任务基础知识

文章目录一、什么是多任务系统&#xff1f;二、FreeRTOS 任务与协程三、任务状态四、任务优先级五、任务实现六、任务控制块七、任务堆栈RTOS 系统的核心就是任务管理&#xff0c;FreeRTOS 也不例外&#xff0c;而且大多数学习 RTOS 系统的工程师或者学生主要就是为了使用 RTOS…

Revit中怎么绘制多面坡度的屋顶及生成墙

​一、Revit中怎么绘制多面坡度的屋顶 像这种坡屋顶我们可以观察到&#xff0c;它的屋顶轮廓都是带有坡度的&#xff0c;那我可以通过添加定义坡度的方式来绘制出该屋顶。 点击建筑选项卡中的屋顶按钮&#xff0c;选择迹线屋顶。 选择使用拾取线工具&#xff0c;在选项栏中将偏…

从零学习SDK(4)使用SDK创建一个简单的应用程序

SDK&#xff08;Software Development Kit&#xff09;即软件开发工具包&#xff0c;是一组帮助我们开发出软件的工具&#xff0c;包括代码、文档、示例等。一般情况下&#xff0c;我们需要将SDK引入到我们的项目中才能使用它。比如&#xff0c;学Java的朋友最早接触的JDK&…

JMeter使用JDBC Request取样器 获取查询结果

JDBC获取查询结果Java脚本创建文件JSON字符串解析 数据库连接配置定义全局变量JDBC Request 创建文件路径以及文件的脚本 import java.io.FileOutputStream; import java.text.SimpleDateFormat; import java.util.Date; boolean result false; try {//String message new Si…

JAVA初学下(仅做笔记)

一. Map集合&#xff08;双列集合&#xff09; 1.特点 键不能重复&#xff0c;值可以重复 Map接口位于最高层 2.常见API 2.1基本功能 ①注意V put&#xff08;K key,V value&#xff09;这个方法&#xff0c; 当加入 的键值对元素的键(key) 不存在时&#xff0c;就会将 键值…

django项目名称重命名

学会这个小白也能轻松修改项目名称;日常板砖中难免遇到项目多次利用的情况,修改项目名称也成了一门手艺😀;实际操作起来也非常简单,没有那些花花绿绿的东西. 一.项目奔跑 1.拿到项目后,我们先在pycharm运行下,看项目是否能正常奔跑起来; 注意收集正常奔跑后项目的执行环境等…

某程序员哀叹:月薪四五万,却每天极度焦虑痛苦,已有生理性不适,又不敢裸辞,怎么办?...

高薪能买来快乐吗&#xff1f;来看看这位程序员的哀叹&#xff1a;实在是扛不住了&#xff0c;每天都在极度焦虑和痛苦中度过&#xff0c;早上起来要挣扎着做心理建设去上班&#xff0c;已经产生生理性的头晕恶心食欲不振。有工作本身的原因&#xff0c;更多是自己心态的问题&a…

12纳米做出了7纳米的性能,为国产芯片打破美国限制指明道路

美国联合日本、荷兰等限制对中国供应先进芯片设备&#xff0c;试图借此阻止中国发展14纳米以下的先进工艺&#xff0c;然而日前中国一家芯片企业发布了一款全新的芯片&#xff0c;却给中国芯片行业指明了新道路&#xff0c;发展先进性能芯片又了可能性。龙芯近期发布了一款全新…