CF2152G

news/2025/10/24 12:12:32/文章来源:https://www.cnblogs.com/xhr0817-blog/p/19162919

有一棵以 \(1\) 为根, \(n\) 个节点的树,每个节点有一个颜色白/黑。给定 \(q\) 组询问,每组询问给了一个 \(u\),表示将 \(u\) 子树内的点的颜色全部翻转。每次操作后回答至少需要几条从根开始的链才能覆盖所有黑点覆盖。

先来转化一下问题,题目问的其实就是有多少个节点 \(u\) 满足 \(u\) 为黑点且 \(u\) 的子树内没有其他黑点。

\(u\) 的子树在 dfs 序上对应 \([dfn_u, bk_u]\)\(nxt_u\) 表示 \(u\)dfs 序上后面第一个黑点的位置,\(co_u\) 表示 \(u\) 的颜色。答案就是满足 \(co_u = 1, nxt_u > bk_u\)\(u\) 的数量。

这就可以用线段树维护了,线段树维护 dfs 序上 \([l, r]\) 这些点里最靠左的黑点,最靠右的黑点以及满足要求的 \(u\) 的数量。合并时只有左半区间最靠右的黑点可能从满足变成不满足,减一下即可。

struct SegTree {int l, r, c; // 最靠左、靠右的黑点,满足条件的黑点数。
} tr[2][MAXN * 4];void Pushup(SegTree *tr, int u, int l, int r) {tr[u] = {(tr[l].l ? tr[l].l : tr[r].l), (tr[r].r ? tr[r].r : tr[l].r), tr[l].c + tr[r].c};tr[u].c -= (tr[l].r && tr[r].l && tr[r].l <= bk[vis[tr[l].r]]); // 减去 tr[l].r 不合法的情况。
}

再考虑翻转,我们对白点也做同样的事情,碰到被 \([dfn_u, bk_u]\) 包含的区间 swap 一下白点和黑点的信息即可。

时间复杂度:\(O(n + q\log n)\)

主要是把题目条件转化成可以用线段树维护形式就可以了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

缩点(Tarjan 算法)

缩点(Tarjan 算法) (有向图)强连通分量缩点 强连通分量缩点后的图称为 SCC。以 \(\mathcal O (N + M)\) 的复杂度完成上述全部操作。性质:缩点后的图拥有拓扑序 \(color_{cnt}, color_{cnt-1},…,1\) ,可以不需再…

平面图最短路(对偶图)

平面图最短路(对偶图) 对于矩阵图,建立对偶图的过程如下(注释部分为建立原图),其中数据的给出顺序依次为:各 \(n(n+1)\) 个数字分别代表从左向右、从上向下、从右向左、从下向上的边。 for (int i = 1; i <=…

多源汇最短路(APSP问题)

多源汇最短路(APSP问题) 使用邻接矩阵存图,可以处理负权边,以 \(\mathcal{O}(N^3)\) 的复杂度计算。注意,这里建立的是单向边,计算双向边需要额外加边。 const int N = 210; int n, m, d[N][N];void floyd() {fo…

最小生成树(MST问题)

最小生成树(MST问题) (稀疏图)Prim算法 使用邻接矩阵存图,以 \(\mathcal{O}(N^2+M)\) 的复杂度计算,思想与 \(\tt djikstra\) 基本一致。 const int N = 550, INF = 0x3f3f3f3f; int n, m, g[N][N]; int d[N], v…

常见概念

常见概念oriented graph:有向图 bidirectional edges:双向边平面图:若能将无向图 \(G=(V,E)\) 画在平面上使得任意两条无重合顶点的边不相交,则称 \(G\) 是平面图。 无向正权图上某一点的偏心距:记为 \(ecc(u) = …

单源最短路径(SSSP问题)

单源最短路径(SSSP问题) (正权稀疏图)动态数组存图+Djikstra算法 使用优先队列优化,以 \(\mathcal O(M\log N)\) 的复杂度计算。 vector<int> dis(n + 1, 1E18); auto djikstra = [&](int s = 1) ->…

CNCF项目记录2025-10

毕业项目持续集成与交付:argo、flux 安全与规范:cert-manager、Falco、in-toto、Open Policy Agent、tuf 云原生网络:cilium 流式消息:cloudevents 容器运行时:containerd、cri-o 服务发现:CoreDNS、etcd 云原生…

代理

代理是一种设计模式StarService.java package com.itheima.demo4proxy; // 明星行为接口 public interface StarService {void sing(String name);String dance(); }Star.java package com.itheima.demo4proxy;import …

双碳目标下,MyEMS 为何成为制造企业的 “刚需工具”?

在 “碳达峰、碳中和” 目标全面推进的背景下,制造业作为能源消耗和碳排放的核心领域,正面临前所未有的减排压力与转型挑战。据统计,我国制造业能耗占全国总能耗的 60% 以上,碳排放占比超 50%—— 这意味着,制造业…

树上路径交

树上路径交 计算两条路径的交点数量,直接载入任意 LCA 封装即可。 int intersection(int x, int y, int X, int Y) {vector<int> t = {lca(x, X), lca(x, Y), lca(y, X), lca(y, Y)};sort(t.begin(), t.end());…

10.23总结

include include using namespace std; class DoubleStack { private: int* arr; // 共享的数组int top1; // 栈1的栈顶指针int top2; // 栈2的栈顶指针int size; // 数组的总大小public: /…

关于 vue项目 代理的坑;baseURL必须为空;代理才会生效

/*** 创建 HTTP 请求实例*/ const request = axios.create({baseURL: baseConfig.SERVER_BASE_URL, // 当使用vite代理的时候基础IP设置为空;当axios 配置了baseURL之后;会导致请求直接跳过vite代理timeout: 60000…

点分治 / 树的重心

点分治 / 树的重心 重心的定义:删除树上的某一个点,会得到若干棵子树;删除某点后,得到的最大子树最小,这个点称为重心。我们假设某个点是重心,记录此时最大子树的最小值,遍历完所有点后取最大值即可。重心的性质…

10.21总结

include include using namespace std; struct Student{ int id; string name; int score; }; int main(){ Student student[100]; int n=0; while(cin>>student[n].id>>student[n].name>>student[n…

最近公共祖先 LCA

最近公共祖先 LCA 树链剖分解法 预处理时间复杂度 \(\mathcal O(N)\) ;单次查询 \(\mathcal O(\log N)\) ,常数较小。 struct HLD {int n, idx;vector<vector<int>> ver;vector<int> siz, dep;vec…

题解:P3343 [ZJOI2015] 地震后的幻想乡

题意:给出一个图,无重边自环,边权为 \([0,1]\) 内的随机数,问最小生成树最大边权的期望。 做法: 注意到题目中有一个 hint:\(m\) 个随机变量的 \(k\) 小值期望是 \(\frac{k}{m+1}\),考虑怎么使用。 考虑暴力,因…

暂存:P14214 [COI 2010] 圆圈 / KOLO

\(\mathcal {P14214\ \ [COI 2010]\ \ 圆圈 \ \ /\ \ KOLO}\) #include<bits/stdc++.h> using namespace std;const int N=5e6+10; int pre[N],nxt[N]; int n,k,a; vector<int>p; const int M=1e7;//5e5…

树论大封装(直径+重心+中心)

树论大封装(直径+重心+中心) struct Tree {int n;vector<vector<pair<int, int>>> e;vector<int> dep, parent, maxdep, d1, d2, s1, s2, up;Tree(int n) {this->n = n;e.resize(n + 1);…

QMPlayer2解析

编译好我们就可以解析QMPlayer2,直接debug运行代码。 首先先看一下懒汉单例模式的QMPlay2GUIClass,宏定义了一个QMPlay2GUI #define QMPlay2GUI \QMPlay2GUIClass::instance()单例模式 QMPlay2GUIClass &qmplay2G…

2025年10月广州单位办公室搬家公司全景解析报告,基于专业测评的技术、性能及市场优势深度分析

在现代化城市运营体系中,单位办公室搬迁是一项涉及空间规划、设备保护、数据安全及效率管理的系统性工程。据2025年最新行业调研数据显示,广州企事业单位搬迁市场需求量年均增长12%,其中超80% 的单位将"专业资…