Codeforces 600E Lomsat gelral (树上启发式合并)
题目链接 Lomsat gelral
占坑……等深入理解了再来补题解……
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i) typedef long long LL; const int N = 600010; int n;
int cc[N], col[N], sz[N], son[N];
LL ans[N]; vector <int> v[N]; void getsize(int x, int fa){
sz[x] = 1;
for (auto u : v[x]){
if (u == fa) continue;
getsize(u, x); sz[x] += sz[u];
if (!son[x] || sz[u] > sz[son[x]]) son[x] = u;
}
} bool skip[N];
LL sum = 0;
int cx = 0;
int x, y; void edt(int x, int fa, int k){
cc[col[x]] += k;
if (k > 0 && cc[col[x]] >= cx){
if (cc[col[x]] > cx)
sum = 0, cx = cc[col[x]];
sum += col[x];
} for (auto u : v[x]){
if (u == fa || skip[u]) continue;
edt(u, x, k);
} } void dfs(int x, int fa, int kep = 0){
for (auto u : v[x]){
if (u == fa || u == son[x]) continue;
dfs(u, x, 0);
} if (son[x]) dfs(son[x], x, 1), skip[son[x]] = 1;
edt(x, fa, 1); ans[x] = sum;
if (son[x]) skip[son[x]] = 0;
if (!kep) edt(x, fa, -1), cx = sum = 0;
} int main(){ scanf("%d", &n);
rep(i, 1, n) scanf("%d", col + i); rep(i, 1, n - 1){
scanf("%d%d", &x, &y);
v[x].push_back(y);
v[y].push_back(x);
} getsize(1, 0);
dfs(1, 0, 0); rep(i, 1, n) printf("%lld\n", ans[i]);
return 0;
}
Codeforces 600E Lomsat gelral (树上启发式合并)的更多相关文章
- CF EDU - E. Lomsat gelral 树上启发式合并
学习:http://codeforces.com/blog/entry/44351 E. Lomsat gelral 题意: 给定一个以1为根节点的树,每个节点都有一个颜色,问每个节点的子树中,颜色最 ...
- codeforces 600E . Lomsat gelral (线段树合并)
You are given a rooted tree with root in vertex 1. Each vertex is coloured in some colour. Let's cal ...
- CF 600 E Lomsat gelral —— 树上启发式合并
题目:http://codeforces.com/contest/600/problem/E 看博客:https://blog.csdn.net/blue_kid/article/details/82 ...
- CF600E Lomsat gelral 树上启发式合并
题目描述 有一棵 \(n\) 个结点的以 \(1\) 号结点为根的有根树. 每个结点都有一个颜色,颜色是以编号表示的, \(i\) 号结点的颜色编号为 \(c_i\). 如果一种颜色在以 \(x\) ...
- 【CF600E】Lomsat gelral——树上启发式合并
(题面来自luogu) 题意翻译 一棵树有n个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和. ci <= n <= 1e5 裸题.统计时先扫一遍得到出 ...
- Codeforces 600E - Lomsat gelral(树上启发式合并)
600E - Lomsat gelral 题意 给出一颗以 1 为根的树,每个点有颜色,如果某个子树上某个颜色出现的次数最多,则认为它在这课子树有支配地位,一颗子树上,可能有多个有支配的地位的颜色,对 ...
- Codeforces 600E. Lomsat gelral(Dsu on tree学习)
题目链接:http://codeforces.com/problemset/problem/600/E n个点的有根树,以1为根,每个点有一种颜色.我们称一种颜色占领了一个子树当且仅当没有其他颜色在这 ...
- codeforces 600E. Lomsat gelral 启发式合并
题目链接 给一颗树, 每个节点有初始的颜色值. 1为根节点.定义一个节点的值为, 它的子树中出现最多的颜色的值, 如果有多种颜色出现的次数相同, 那么值为所有颜色的值的和. 每一个叶子节点是一个map ...
- Codeforces 600 E. Lomsat gelral (dfs启发式合并map)
题目链接:http://codeforces.com/contest/600/problem/E 给你一棵树,告诉你每个节点的颜色,问你以每个节点为根的子树中出现颜色次数最多的颜色编号和是多少. 最容 ...
随机推荐
- python入门:UTF-8转换成GBK编码
#!/usr/bin/env python # -*- coding:utf-8 -*- #UTF-8转换成GBK编码 #temp(临时雇员,译音:泰坡) #decode(编码,译音:迪口德) #en ...
- PHP四种序列化方案
原文地址:https://t.ti-node.com/thread/... 数据的序列化是一个非常有用的功能,然而目测很多人跟我一样,在刚接触这玩意的时候压根就不理解这货色到底是干啥用的,反正老师说了 ...
- lavarel 添加自定义辅助函数
Laravel 提供了很多 辅助函数,有时候我们也需要创建自己的辅助函数. 必须 把所有的『自定义辅助函数』存放于 bootstrap 文件夹中. 并在 bootstrap/app.php 文件的最顶 ...
- fiddler 抓包数据不会自动下拉解决方法
选中 view 里面的 AutoScroll Session List 即可
- iOS开发-NSLog不打印设置 Prefix
首先在-Prefix.pch,文件里添加如下代码 #ifdef DEBUG #define NSLog(...) NSLog(__VA_ARGS__) #define debugMethod() NS ...
- python学习-- class 类中需要注意的地方
from django.db import models class Person(models.Model): name = models.CharField(max_length=30) ...
- javascript 获取键盘上的按键代码KeyCode
Enter键的keyCode为13 Alt + Enter 的keyCode为10 $(document).on( 'keypress', function ( e ) { console.log( ...
- 【转】Bad Smell(代码的坏味道)
1.Duplicated Code(重复的代码) 臭味行列中首当其冲的就是Duplicated Code.如果你在一个以上的地点看到相同的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好. ...
- Welcome-to-Swift-04集合类型(Collection Types)
Swift提供了两种集合类型来存放多个值——数组(Array)和字典(Dictionary).数组把相同类型的值存放在一个有序链表里.字典把相同类型的值存放在一个无序集合里,这些值可以通过唯一标识符( ...
- Tarjan的强联通分量
求强联通分量有很多种. <C++信息学奥赛一本通> 中讲过一个dfs求强联通分量的算法Kosdaraju,为了骗字数我就待会简单的说说.然而我们这篇文章的主体是Tarjan,所以我肯定说 ...