知识前驱:树链剖分

codeforces600E. Lomsat gelral

题意:给出一个树,求出每个节点的子树中出现次数最多的颜色的编号和

分析:递归求解,对于一棵树,求出他的所有子树的颜色编号次数加上它本身,找到最大即是它的答案。对于他的兄弟来说,应该将计数器清0并同过程求解,在最后一个兄弟计算完毕后,此时计数器可不清0,再次统计该兄弟的兄弟(即该兄弟的同深度其他节点),便求出了它的父亲的所有子树的颜色编号次数,再加上它本身,找到最大即是它父亲的答案。

dsu on tree在这样一个暴力的过程中,将重儿子作为上述的最后一个兄弟,此时计数器不清0,再暴力统计轻儿子以获得答案。

 1 #pragma GCC optimize(3, "Ofast", "inline")
2
3 #include <bits/stdc++.h>
4
5 #define start ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
6 #define ll long long
7 #define LL long long
8 #define uu unsigned int
9 #define int ll
10 #define ls st<<1
11 #define rs st<<1|1
12 using namespace std;
13 const int maxn = (ll) 1e6 + 5;
14 const int mod = 1000000007;
15 const int inf = 0x3f3f3f3f;
16
17 int son[maxn], siz[maxn], cnt[maxn], col[maxn], ans[maxn];
18 vector<int> v[maxn];
19
20 void dfs(int x, int pre) {
21 siz[x] = 1;
22 for (auto &to:v[x]) {
23 if (to == pre)
24 continue;
25 dfs(to, x);
26 siz[x] += siz[to];
27 if (siz[to] > siz[son[x]])
28 son[x] = to;
29 }
30 }
31
32 int sum, maxx, now;
33
34 void add(int x, int pre, int val) {
35 cnt[col[x]] += val;
36 if (cnt[col[x]] > maxx) {
37 maxx = cnt[col[x]];
38 sum = col[x];
39 } else if (cnt[col[x]] == maxx)
40 sum += col[x];
41 for (auto &to:v[x]) {
42 if (to == now || to == pre)
43 continue;
44 add(to, x, val);
45 }
46 }
47
48 void dfs2(int x, int pre, bool ord) {
49 for (auto &to:v[x]) {
50 if (to == pre || to == son[x])
51 continue;
52 dfs2(to, x, false);
53 }
54 if (son[x]) {
55 dfs2(son[x], x, true);
56 now = son[x];
57 }
58 add(x, pre, 1);
59 ans[x] = sum;
60 if (!ord) {
61 now = 0;
62 add(x, pre, -1);
63 sum = 0;
64 maxx = 0;
65 }
66 }
67
68 signed main() {
69 start;
70 int n;
71 cin >> n;
72 for (int i = 1; i <= n; ++i)
73 cin >> col[i];
74 for (int i = 1; i < n; ++i) {
75 int x, y;
76 cin >> x >> y;
77 v[x].push_back(y);
78 v[y].push_back(x);
79 }
80 dfs(1, 0);
81 dfs2(1, 0, 0);
82 for (int i = 1; i <= n; ++i)
83 cout << ans[i] << ' ';
84 return 0;
85 }

codeforces600E. Lomsat gelral(dsu on tree笔记)的更多相关文章

  1. codeforces600E. Lomsat gelral(dsu on tree)

    dsu on tree先分轻重儿子先处理轻边,再处理重儿子再加上轻儿子的答案 #include<iostream> #include<cstdio> #include<q ...

  2. 【CodeForces】600 E. Lomsat gelral (dsu on tree)

    [题目]E. Lomsat gelral [题意]给定n个点的树,1为根,每个点有一种颜色ci,一种颜色占领一棵子树当且仅当子树内没有颜色的出现次数超过它,求n个答案——每棵子树的占领颜色的编号和Σc ...

  3. Codeforces.600E.Lomsat gelral(dsu on tree)

    题目链接 dsu on tree详见这. \(Description\) 给定一棵树.求以每个点为根的子树中,出现次数最多的颜色的和. \(Solution\) dsu on tree模板题. 用\( ...

  4. Codeforces 600E. Lomsat gelral(Dsu on tree学习)

    题目链接:http://codeforces.com/problemset/problem/600/E n个点的有根树,以1为根,每个点有一种颜色.我们称一种颜色占领了一个子树当且仅当没有其他颜色在这 ...

  5. cf600E. Lomsat gelral(dsu on tree)

    题意 题目链接 给出一个树,求出每个节点的子树中出现次数最多的颜色的编号和 Sol dsu on tree的裸题. 一会儿好好总结总结qwq #include<bits/stdc++.h> ...

  6. CF 600E. Lomsat gelral(dsu on tree)

    解题思路 \(dsu\) \(on\) \(tree\)的模板题.暴力而优雅的算法,轻儿子的信息暴力清空,重儿子的信息保留,时间复杂度\(O(nlogn)\) 代码 #include<iostr ...

  7. [Codeforces600E] Lomsat gelral(树上启发式合并)

    [Codeforces600E] Lomsat gelral(树上启发式合并) 题面 给出一棵N个点的树,求其所有子树内出现次数最多的颜色编号和.如果多种颜色出现次数相同,那么编号都要算进答案 N≤1 ...

  8. codeforces600E Lomsat gelral【线段树合并/DSU】

    第一次AC这道题,是三年前的一个下午,也许晚上也说不定.当时使用的\(DSU\) \(on\) \(tree\)算法,如今已经淡忘,再学习新的算法过程中,却与旧物重逢.生活中充满不可知会的相遇,即使重 ...

  9. codeforces600E Lomsat gelral

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  10. Educational Codeforces Round 2 E. Lomsat gelral(dsu)

    题目链接 题意:给你一棵以1为根n个点的树,问你以i为根的子树的众数和是多少 思路:dsu是一种优化暴力的手段 首先进行轻重链剖分 然后只记录重链的信息 轻链的信息就直接暴力查找 经过证明这样复杂度可 ...

随机推荐

  1. asp.net WebApi JWT

    文章转自 https://blog.csdn.net/liwan09/article/details/83820651 参考资料: https://docs.microsoft.com/en-us/a ...

  2. P3498 [POI2010]KOR-Beads 题解

    前言: 最近在做哈希的题,发现了这道好题,看题解里很多大佬的方法都很巧妙,自己就发一个较为朴素的方法吧. 题意: 题目传送门 给你一个序列,需要求出数 k,使划分的子串长度为 k 时,不同的子串数量最 ...

  3. unity添加Mysql的dll以及发布的问题

    最近在做一个unity项目中,要读取数据库,还是MySql的数据库.遇到了很多问题,写出来供大家参考一下. 关于unity引用第三方的Mysql.data.dll的问题: 这个地方有一个难点,正常的C ...

  4. 【城南】如何识别AI生成图?视觉AIGC伪造检测技术综述

    如何识别 AI 生成图片?or 如何识别 AIGC 图?or 如何识别 AI 换脸?or AI生成图伪造检测? 类似的说法有很多种,总之就是利用AI技术来鉴别一张图是不是AI生成的,这种AI技术就是本 ...

  5. ChatGPT使用案例,助你快速上手,做事事半功倍

    ChatGPT介绍 首先我们来看一下chat-gpt自己的介绍: ChatGPT的发展历程 2015年,OpenAI成立,致力于研究和开发人工智能技术.在成立初期,OpenAI的创始人之一Elon M ...

  6. 深度学习中的循环神经网络”在Transformer中的应用

    目录 深度学习中的"循环神经网络"在Transformer中的应用 背景介绍 文章目的 目标受众 技术原理及概念 基本概念解释 相关技术比较 实现步骤与流程 准备工作:环境配置与依 ...

  7. BLOB-CLOB 处理成String (*)

    实体类中的写法: --实体类对应的类型为byte[] (clob为char[]). /* byte[] blob = commonService.getPersonImage(bean.getIdCa ...

  8. JVM中的编译器

    JVM中集成了两种编译器,Client Compiler和Server Compiler,它们的作用也不同.Client Compiler注重启动速度和局部的优化,Server Compiler则更加 ...

  9. Typecho博客部署一言接口

    开始部署 下载代码上传至你的网站目录,把解压出来的文件夹改名为hitokoto 然后访问https://域名及文件路径/hitokoto查看效果 示例:https://sunpma.com/other ...

  10. 你知道.NET的字符串在内存中是如何存储的吗?

    毫无疑问,字符串是我们使用频率最高的类型.但是如果我问大家一个问题:"一个字符串对象在内存中如何表示的?",我相信绝大部分人回答不上来.我们今天就来讨论这个问题. 一.字符串对象的 ...