在地铁上口胡了一下。不知道对不对。

考虑记录每一个点 \(i\) 离他最远的一个祖先使得祖先到 \(i\) 的路径上没有 \(a_i\)。设他为 \(\text{lst}_i\)。然后如果两个 \(u, v\) 的 \(\text{lst}\) 相等,那么这条路径就是好的。每种颜色枚举即可。

八成假了(?),欢迎 Hack。

PS:全对了,确实能过。

/*******************************
| Author: DE_aemmprty
| Problem: E. Count Paths
| Contest: Codeforces - Educational Codeforces Round 162 (Rated for Div. 2)
| URL: https://codeforces.com/contest/1923/problem/E
| When: 2024-02-23 23:29:35
|
| Memory: 512 MB
| Time: 2000 ms
*******************************/
#include <bits/stdc++.h>
using namespace std; long long read() {
char c = getchar();
long long x = 0, p = 1;
while ((c < '0' || c > '9') && c != '-') c = getchar();
if (c == '-') p = -1, c = getchar();
while (c >= '0' && c <= '9')
x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * p;
} const int N = 2e5 + 7; int n;
int c[N], lst[N], f[N];
vector <int> to[N], pos[N];
vector <int> p[N];
vector <int> col;
int cnt[N]; void dfs(int u, int fa) {
f[u] = fa;
if (fa) p[c[fa]].push_back(u);
lst[u] = 0;
if (p[c[u]].size()) lst[u] = p[c[u]].back();
for (int v : to[u])
if (v != fa)
dfs(v, u);
if (fa) p[c[fa]].pop_back();
} void solve() {
n = read();
for (int i = 1; i <= n; i ++) {
c[i] = read();
pos[i].clear();
to[i].clear();
p[i].clear();
}
for (int i = 1; i <= n; i ++)
pos[c[i]].push_back(i);
for (int i = 1, u, v; i < n; i ++) {
u = read(), v = read();
to[u].push_back(v);
to[v].push_back(u);
}
dfs(1, 0); long long ans = 0;
for (int i = 1; i <= n; i ++) {
for (int x : pos[i]) {
cnt[lst[x]] ++;
col.push_back(lst[x]);
}
for (int x : col) {
ans += 1ll * cnt[x] * (cnt[x] - 1) / 2;
cnt[x] = 0;
}
col.clear();
}
for (int i = 1; i <= n; i ++)
ans += (f[lst[i]] > 0);
cout << ans << '\n';
} signed main() {
int t = 1;
t = read();
while (t --) solve();
return 0;
}

CF1923E 一个无需 DSU On Tree 的解法的更多相关文章

  1. dsu on tree ——附带buff的暴力解法

    这篇博客只是简单叙述思想(因为ML太弱了),具体例题请转其他博客. dsu on tree,许多OI将其归于启发式合并,当然如果你能理解更好,这只是一个理解方式罢了. 思想简述 顾名思义,这个算法是处 ...

  2. DSU On Tree——Codeforces 600E(E. Lomsat gelral)

    有这么一类问题,要求统计一棵树上与子树相关的某些信息,比如:在一棵所有节点被染色的树上,统计每棵子树上出现次数最多的颜色编号之和. 很自然的可以想到用DFS序+主席树去求解,但是编码复杂度很高: 然后 ...

  3. CF 741D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths [dsu on tree 类似点分治]

    D. Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths CF741D 题意: 一棵有根树,边上有字母a~v,求每个子树中最长的边,满 ...

  4. CF 570D. Tree Requests [dsu on tree]

    传送门 题意: 一棵树,询问某棵子树指定深度的点能否构成回文 当然不用dsu on tree也可以做 dsu on tree的话,维护当前每一个深度每种字母出现次数和字母数,我直接用了二进制.... ...

  5. [dsu on tree]【学习笔记】

    十几天前看到zyf2000发过关于这个的题目的Blog, 今天终于去学习了一下 Codeforces原文链接 dsu on tree 简介 我也不清楚dsu是什么的英文缩写... 就像是树上的启发式合 ...

  6. CF 375D. Tree and Queries【莫队 | dsu on tree】

    题意: 一棵树,询问一个子树内出现次数$≥k$的颜色有几种 强制在线见上一道 用莫队不知道比分块高到哪里去了,超好写不用调7倍速度!!! 可以用分块维护出现次数这个权值,实现$O(1)-O(\sqrt ...

  7. dsu on tree 树上启发式合并 学习笔记

    近几天跟着dreagonm大佬学习了\(dsu\ on\ tree\),来总结一下: \(dsu\ on\ tree\),也就是树上启发式合并,是用来处理一类离线的树上询问问题(比如子树内的颜色种数) ...

  8. UOJ#266. 【清华集训2016】Alice和Bob又在玩游戏 博弈,DSU on Tree,Trie

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ266.html 题解 首先我们可以直接暴力 $O(n^2)$ 用 sg 函数来算答案. 对于一个树就是枚举 ...

  9. dsu on tree入门

    先瞎扯几句 说起来我跟这个算法好像还有很深的渊源呢qwq.当时在学业水平考试的考场上,题目都做完了不会做,于是开始xjb出题.突然我想到这么一个题 看起来好像很可做的样子,然而直到考试完我都只想出来一 ...

  10. 洛谷P4482 [BJWC2018]Border 的四种求法 字符串,SAM,线段树合并,线段树,树链剖分,DSU on Tree

    原文链接https://www.cnblogs.com/zhouzhendong/p/LuoguP4482.html 题意 给定一个字符串 S,有 q 次询问,每次给定两个数 L,R ,求 S[L.. ...

随机推荐

  1. 时间工具类之“LocalDateTime方案转换地域性时差问题->UTC时间转纽约时间”

    一.使用方法 1.获取纽约ZoneId[纽约时区的ZoneId标识为"America/New_York"] -> ZoneId.of("America/New_Yo ...

  2. 鸿蒙NEXT实践(二):公共事件通信实践-智能节电案例

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  3. Kafka怎么配置SASL用户名密码认证

    服务端配置(server.properties): # 开启SASL认证 security.protocol=SASL_PLAINTEXT sasl.mechanism=PLAIN # 配置JAAS文 ...

  4. 用curl测网速统计访问耗时

      在<从基础到高级,带你结合案例深入学习curl命令>中,介绍了curl的使用方法,这里介绍一个用于统计响应耗时的最佳实践,助力老铁们合理设置网络超时时间.   下面介绍一个用于统计访问 ...

  5. Kubernetes控制器-Deployment

    Kubernetes控制器-Deployment 我们已经知道ReplicaSet控制器是用来维护集群中运行的Pod数量的,但是往往在实际操作时候,我们反而不去直接使用RS,而是使用更上层的控制器,比 ...

  6. 写Leetcode 对业务代码是帮助的

    业务中遇到的表结构以及场景如下: id name pid 1 A 0 2 A 1 3 A 2 4 B 0 5 B 4 6 B 5 7 C 0 8 D 7 9 E 8 是一个层级结构,名字可能相同,也可 ...

  7. 性能、安全和稳定,袋鼠云数据服务平台 DataAPI 为企业 API 保驾护航

    通过API 对外提供数据服务是大部分企业中比较常见的数据应用方式,对于 API 平台管理者.开发者和调用者来说,API 的调用性能.安全性和稳定性是在平台选型时最需要考虑的三个因素. 袋鼠云API开发 ...

  8. IT技术人的职业发展能力全景图

    大家好,我是Edison. 最近在学习一门偏职业发展的课程<程序员的职业发展规划手册>,里面提到了一个IT技术人的职业发展能力全景图,觉得画的十分好,我自己这几年其实也在不断实践整理自己的 ...

  9. Jquery 选择html 标签获取值

    https://zhidao.baidu.com/question/299628455.html 这个问题包含两个方面:jquery选择器(即针对你指定的那个input元素)和获取内容(即获得输入的值 ...

  10. 学习spring cloud记录9-nacos深一步学习

    前言 统一配置管理将各个服务的配置管理起来,如果发生变化,可以主动向服务发送信息.配置管理服务也在nacos中. 配置热更新 在配置列表新建配置 发布后,这个配置已经进入统一配置管理 服务配置拉去 项 ...