codeforces600E. Lomsat gelral(dsu on tree笔记)
知识前驱:树链剖分
题意:给出一个树,求出每个节点的子树中出现次数最多的颜色的编号和
分析:递归求解,对于一棵树,求出他的所有子树的颜色编号次数加上它本身,找到最大即是它的答案。对于他的兄弟来说,应该将计数器清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笔记)的更多相关文章
- codeforces600E. Lomsat gelral(dsu on tree)
dsu on tree先分轻重儿子先处理轻边,再处理重儿子再加上轻儿子的答案 #include<iostream> #include<cstdio> #include<q ...
- 【CodeForces】600 E. Lomsat gelral (dsu on tree)
[题目]E. Lomsat gelral [题意]给定n个点的树,1为根,每个点有一种颜色ci,一种颜色占领一棵子树当且仅当子树内没有颜色的出现次数超过它,求n个答案——每棵子树的占领颜色的编号和Σc ...
- Codeforces.600E.Lomsat gelral(dsu on tree)
题目链接 dsu on tree详见这. \(Description\) 给定一棵树.求以每个点为根的子树中,出现次数最多的颜色的和. \(Solution\) dsu on tree模板题. 用\( ...
- Codeforces 600E. Lomsat gelral(Dsu on tree学习)
题目链接:http://codeforces.com/problemset/problem/600/E n个点的有根树,以1为根,每个点有一种颜色.我们称一种颜色占领了一个子树当且仅当没有其他颜色在这 ...
- cf600E. Lomsat gelral(dsu on tree)
题意 题目链接 给出一个树,求出每个节点的子树中出现次数最多的颜色的编号和 Sol dsu on tree的裸题. 一会儿好好总结总结qwq #include<bits/stdc++.h> ...
- CF 600E. Lomsat gelral(dsu on tree)
解题思路 \(dsu\) \(on\) \(tree\)的模板题.暴力而优雅的算法,轻儿子的信息暴力清空,重儿子的信息保留,时间复杂度\(O(nlogn)\) 代码 #include<iostr ...
- [Codeforces600E] Lomsat gelral(树上启发式合并)
[Codeforces600E] Lomsat gelral(树上启发式合并) 题面 给出一棵N个点的树,求其所有子树内出现次数最多的颜色编号和.如果多种颜色出现次数相同,那么编号都要算进答案 N≤1 ...
- codeforces600E Lomsat gelral【线段树合并/DSU】
第一次AC这道题,是三年前的一个下午,也许晚上也说不定.当时使用的\(DSU\) \(on\) \(tree\)算法,如今已经淡忘,再学习新的算法过程中,却与旧物重逢.生活中充满不可知会的相遇,即使重 ...
- codeforces600E Lomsat gelral
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- Educational Codeforces Round 2 E. Lomsat gelral(dsu)
题目链接 题意:给你一棵以1为根n个点的树,问你以i为根的子树的众数和是多少 思路:dsu是一种优化暴力的手段 首先进行轻重链剖分 然后只记录重链的信息 轻链的信息就直接暴力查找 经过证明这样复杂度可 ...
随机推荐
- APP中RN页面热更新流程-ReactNative源码分析
平时使用WebStorm或VSCode对RN工程中的文件修改后,在键盘上按一下快捷cmd+s进行文件保存,此时当前调试的RN页面就会自动进行刷新,这是RN开发相比于原生开发一个很大的优点:热更新. 那 ...
- Abaqus结构仿真软件的非线性问题与解决方案
无论是什么FEA 软件,想要获得非线性问题的一些解决方法始终没有那么简单.遇到问题是很常见的,那么下面就来看看Abaqus用户克服这一类问题的解决方法吧. 1. 简化模型 从简化模型开始,通过逐渐添 ...
- 《MS17-010(永恒之蓝)—漏洞复现及防范》
作者: susususuao 免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责. 一. 什么是永恒之蓝? - 永恒之蓝 永恒之蓝(Eternal Blue)是一种利用Window ...
- uniapp 全局背景音乐播放+暂停(跳转页面不暂停)
最近需要一个功能 是在h5中播放小游戏的背景音乐,但是跳转界面之后音乐不暂停,就是跳转多个页面之后,音乐依然在播放,在游戏界面会有设置的静音的按钮,可以开启音乐和关闭音乐. 单独建了一个music.j ...
- vue2中v-if 或者 v-show 使用数组中的值判断不生效
知识点来源:博客园==> 外号蓝大胖// 对象this.$set(obj, key, value)/vue.set(obj, key, value)// 数组this.$set(arr, ind ...
- 开源 API 网关-访问策略(二)
在上篇文章API网关:开源 API 网关-访问策略(一) 中,我们简单演示了如何在IP维度中对请求路径设置黑白名单,以此来限制客户端请求的权限和范围. 此外,Apinto网关为客户端提供了一种统一的. ...
- 使用TensorFlow进行自动化测试与部署
目录 标题:<使用 TensorFlow 进行自动化测试与部署> 背景介绍: 随着人工智能和机器学习技术的快速发展,TensorFlow 成为了一个广泛应用的深度学习框架,被广泛用于构建神 ...
- 自然语言处理 Paddle NLP - 任务式对话系统-理论
什么是任务型对话: 任务型:用于帮助用户完成某领域的特定任务,例如订餐.查天气.订票等 闲聊型:也称作开放域对话系统,目标是让用户持续的参与到交互过程,提供情感陪伴 问答型:提供知识满足,具体类型比较 ...
- 基于python+django的宠物商店-宠物管理系统设计与实现
该系统是基于python+django开发的宠物商店-宠物管理系统.是给师妹开发的课程作业.现将源码开放给大家.大家学习过程中,如遇问题可以在github咨询作者. 演示地址 前台地址: http:/ ...
- docker 安装redis 6.0.8哨兵集群(一主两从三哨兵)
准备三台主机并且安装了docker 192.168.31.132 192.168.31.134 192.168.31.144 linux 版redis6.0.8 下载 下载地址:https://dow ...