首页 > 其他分享 >C. Tree Infection

C. Tree Infection

时间:2024-07-12 17:10:36浏览次数:8  
标签:pq val int Tree Infection vis eles include

https://codeforces.com/problemset/problem/1665/C

题目

解析

很显然,树的节点感染只会在兄弟节点之间,每层独立的兄弟节点都得感染至少一个,然后让他自由扩展(时间差),那么很显然第一遍就是每层都得感染。感染的次序就是按照兄弟节点的数量降序,并且要加上1的单独节点。然后如果vis-(i-1)比当前层数少,说明第一遍无法磨灭全部,那么就把差值存到大根堆中。然后通过每次额外把最大的一个值减一使得时间最小,设置结束条件为spread>=pq.top()就是自由扩散的值已经够把所有的节点覆盖的时候。

代码

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
#include<sstream>
#include<string>
#include<string.h>
#include<iomanip>
#include<stdlib.h>
#include<map>
#include<queue>
#include<limits.h>
#include<climits>
#include<fstream>
#include<stack>
#define IOS ios::sync_with_stdio(false), cin.tie(0) ,cout.tie(0)
using namespace std;
#define int long long
const int N = 2e5 + 10;

struct ele
{
	int id, val;
}eles[N];
bool cmp(ele a, ele b) { return a.val > b.val; }
signed main()
{
	IOS;
	int t; cin >> t;
	while (t--)
	{
		int n; cin >> n;
		int vis = 0;
		for (int i = 1; i <= n; i++)
		{
			eles[i].id = i;
			eles[i].val = 0;
		}
		for (int i = 1; i < n; i++)
		{
			int x; cin >> x;
			eles[x].val++;
			if (eles[x].val == 1)vis++;
		}
		sort(eles + 1, eles + 1 + n, cmp);
		eles[vis + 1].val = 1;
		vis++;
		int ans = vis;
		priority_queue<int>pq;
		for (int i = 1; i <= vis; i++)
		{
			if (eles[i].val > vis - i + 1)
			{
				pq.push(eles[i].val - vis + i - 1);
			}
		}
		int spread = 0;//每一层平均减去的值
		while (!pq.empty() and spread < pq.top())//每层平均下降,那么相当于底线水平上升
		{
			int x = pq.top() - 1;
			pq.pop(); pq.push(x);
			spread++;
		}
		ans += spread;
		cout << ans  << '\n';
	}

	return 0;
}

标签:pq,val,int,Tree,Infection,vis,eles,include
From: https://www.cnblogs.com/zzzsacmblog/p/18298956

相关文章

  • db B+Tree 特殊的二叉搜索树, 时间复杂度
     B+树是一种自平衡的树数据结构,常用于数据库和文件系统的实现中。它具有以下特点:多路平衡查找树:每个节点可以有多个子节点,且所有叶子节点都位于同一层,保证了树的高度相对较小,提高了查询效率。键值对存储:每个节点存储一个或多个键值对,内部节点的键用于指导搜索,而所有的......
  • [namespace hdk] Balanced_tree 整合
    代码#include<bits/stdc++.h>usingnamespacestd;namespacehdk{ namespacebalanced_tree{ constintN=2000001,inf=114514191; classsplay{ private: introot,tot; structtree{ intw; intcnt,size; intfa,son[2]; }t[N];......
  • 01 Tree
    有利用数学归纳法思想的扩展法,就有反过来的删除法,这里利用删除法考虑对于一颗合法的树,显然删除某两个叶子,会让其共同父亲变成叶子,这就形成了一个递归的过程;而某两个叶子在序列\(a\)中也一定是相邻的,而且很容易发现特征,就是其\(a\)的大小相差\(1\)但是现在的问题就是我们不知道删......
  • Caterpillar on a Tree
    首先一个很显然的地方就是使用传送门肯定是在叶子节点使用,我们来考虑一下整个过程是怎么样的为了方便,我们不妨假设可以传送回根节点\(k+1\)次,然后要求最后回到根节点我们先从根节点走到某一个叶子结点,然后再从这个叶子节点走到另一个叶子节点,然后继续走到另一个叶子节点,一直这么......
  • B-Tree的应用
    在数据库和文件系统中,B-树及其变种被广泛用于索引结构,以优化数据的存储和检索效率。当处理的数据项是很大的记录时,使用改进的B-树可以带来显著的优势。以下是这种改进B-树的关键特性和工作原理的详细解释:1.**只有叶子节点存放完整记录**在标准的B-树中,每个节点(包括非叶子节......
  • cv2中二值图轮廓与轮廓层级参数cv2.RETR_TREE
    1.二值图的轮廓在使用cv2.findContours时,黑白二值图(像素值只有0或255)的轮廓都是以白色像素作为前景,黑色像素作为背景。看下面两个图(左图与右图同样大小都是200x200,左图是四周为黑色,中间为白色,右图为四周为白色,中间为黑色)。               ......
  • el-tree懒加载获取所有已经选的节点
    用于el-tree懒加载一个图层目录,勾选父级目录,需要得到该父级目录下所有叶子节点数据<el-tree:data="directoryDataLayer"show-checkboxnode-key="id":load="directoryDataLoad"......
  • 一文理解 Treelite,Treelite 为决策树集成模型的部署和推理提供了高效、灵活的解决方案
    ......
  • World of Warcraft [CLASSIC] Talent Tree
    WorldofWarcraft[CLASSIC] TalentTree 天赋树模拟器01)初始化整个页面,选择游戏职业,初始化3个天赋树02)初始化天赋树结构,层次为N层03)每层有4个技能,设置可显示,设置隐藏04)每个技能可配置图表,技能名称,备注说明,每一级说明不同05)每层的技能可支持最大技能点......
  • 静态 top tree 入门
    理论我们需要一个数据结构维护树上的问题,仿照序列上的问题,我们需要一个方法快速的刻画出信息。比如说线段树就通过分治的方式来通过将一个区间划分成\(\logn\)个区间并刻画出这\(\logn\)个区间的信息。然后我们考虑把这个东西放到树上类比。你发现线段树上每个非叶节点都......