cf补题计划_Edu 162_E

news/2024/10/7 4:38:15

E. Count Paths

题目简介



乍一眼一看是一个很简单树上dp(实际上也是树上dp
第一看做法是考虑dp[i][j]表达为第i个节点的下面有多少个颜色为j的节点,且这个节点于i节点之间无其他的节点为j颜色,然后dp转移十分的简单,但是n是\(2\cdot10^5\),绝对超时

然后显然我们发现,一个节点只有一个颜色,根据时间复杂度来看的话,一个节点所储存的信息不会太多,所以我们考虑一个节点只存一个信息就是他自身颜色的信息,

不难发现对于节点\(i\)来说 他的颜色为\(color_i\)如果dfs进入该点,i节点的子树中的\(color_i\)点和子树外面的外界\(color_i\)点相连,而其他颜色并无影响,这样的话我们就可以用一个节点信息就表达出来了,所以考虑成立

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
#define pii pair<int, int>
#define all(a) a.begin(), a.end()
#define debug(x) cout << #x << " = " << x << endl
#define sz(a) ((int)a.size())
const int mod = 998244353, N = 2e5+10, G = 3;
vector<int> edge[N];
ll a[N], dp[N], sum[N], ans = 0;
void dfs(int u, int father)
{ans += sum[a[u]];dp[u] = sum[a[u]] + 1;for (int i = 0; i < edge[u].size(); i++){sum[a[u]] = 1;int v = edge[u][i];if (v == father){continue;}dfs(v, u);}sum[a[u]] = dp[u];
}
void solve()
{int n;cin >> n;ans = 0;for (int i = 1; i <= n; i++){cin >> a[i];sum[i] = 0;edge[i].clear();}for (int i = 1; i < n; i++){int u, v;cin >> u >> v;edge[u].pb(v);edge[v].pb(u);}dfs(1, 0);cout << ans << endl;
}int main()
{ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/54503.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Operating Systems: Principles and Practice 2nd ed. Edition

https://recursivebooks.com/ Operating Systems: Principles and Practice 2nd ed. Editionby Thomas Anderson (Author), Michael Dahlin (Author)https://www.kea.nu/files/textbooks/ospp/

Vue 3 路由组件缓存keep-alive

Vue 3 路由组件缓存 Vue3 KeepAlive官方文档 1. keep-alive 基本介绍keep-alive 是 Vue 的内置组件,用于缓存动态组件或路由组件,避免组件被频繁销毁和重建,从而提高性能。 当组件被 keep-alive 包裹后,在路由切换时不会销毁组件,而是将其缓存起来。下次切换回来时,会直接…

全网最适合入门的面向对象编程教程:41 Python 常用复合数据类型-队列(FIFO、LIFO、优先级队列、双端队列和环形队列)

在 Python 中,队列(Queue)是一种常用的数据结构,用于按照特定的顺序存储和访问数据。队列的主要类型包括先进先出(FIFO)、后进先出(LIFO)、优先级队列、双端队列(Deque)和环形队列,每种队列在不同的应用场景中都有其独特的用途。全网最适合入门的面向对象编程教程:…

基于 INFINI Pizza 为 Hugo 静态站点添加搜索功能

INFINI Pizza 是 INFINI Labs 即将发布的一个基于 Rust 编写的搜索引擎(即将完全开源),目前已经完成基本的搜索能力,并且基于 INFINI Pizza 的核心引擎,提供了一个 WASM 版本的超轻量级内核,可以很方便的嵌入到各类应用系统,比如网站,尤其是静态站点或者小型的博客系统…

VulNyx - Internal

扫描发现有三个端口basic验证需要用户名密码登录访问80端口 \URLFinder 发现有个internal的php文件看看有无任意文件读取漏洞发现没有回显 但是总感觉怪怪的 应该是有啥东西 因为他这里的出现了pre 标签也许他是过滤了../ 我们改成....//试试真的读取到了通过读取passwd发现有个…

财务知识-会计科目

财务知识-会计科目

【JAVA开发】JDBC链接各大数据库(纯代码)

原创 OA圈子在开发中,我们有时候会涉及到链接第三方数据库视图或者中间库,此时我们需要在OA代码中去创建相应的链接工具类,下面我们分享链接工具类的方法: 链接工具类: import com.seeyon.ctp.common.AppContext; import java.sql.*;public class JdbcUtil {private stat…

第2天---RSA基础题型

T1.知pqe求d解m题目: from Crypto.Util.number import *flag = bNSSCTF{******}p = getPrime(512) q = getPrime(512) n = p*q e = 65537 phi = (p-1)*(q-1)m = bytes_to_long(flag)c = pow(m, e, n)print(fp = {p}) print(fq = {q}) print(fe = {e}) print(fc = {c}) p = 105…