尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

P11967 [GESP202503 八级] 割裂 题解

P11967 [GESP202503 八级] 割裂 题解
📅 发布时间:2026/6/21 0:14:26

我讨厌倍增 lca, 因此提供一种非倍增做法。

首先我们先解析题意。相当于在一棵树上给你一条链 A,然后又给你一个有着若干条链的集合 B。问你在 A 上的节点有多少个不存在于集合 B 中的任意链上。

前置的一个知识是我们如何不利用倍增来找在一条链上的点。

我们发现,一个点 s 在链 x, y上,当且仅当

(lca(s,x) == s || lca(s,y) == s) && dep[s] >= dep[lca(x, y)]

自己手玩一棵树就可以得到,不讲解。

那么其实这题已经做完了。我们用树上差分处理出对于每个点, B 里的链经过这个点的次数。

然后判断通过刚才的方法判断这个点是不是在链 A 上。

lca 采用 \(O(1)\) lca。

#include <bits/stdc++.h>
#define rep(i, a, b) for(int i = a; i <= b; ++i)
using namespace std;
const int N = 1000005;
int ans, n, a, x, y, z, target, cnt, b1, b2, dfn[N], dep[N], st[N][26], mark[N], father[N];
vector<int> e[N];
void dfs(int s, int fa) {father[s] = fa;dep[s] = dep[fa] + 1;dfn[s] = ++cnt;st[dfn[s]][0] = fa;for(const int to : e[s]) {if(to == fa) continue;dfs(to, s);}
}
inline int get(int x, int y) {return dep[x] < dep[y] ? x : y;}
void init() {for(int i = 1; (1 << i) <= n; ++i) {rep(j, 1, n) {if(j + (1 << i) - 1 > n) break;st[j][i] = get(st[j][i - 1], st[j + (1 << i - 1)][i - 1]);}}
}
inline int lca(int x, int y) {if(x == y) return x;x = dfn[x], y = dfn[y];if(x > y) swap(x, y);int len = __lg(y - x);return get(st[x + 1][len], st[y - (1 << len) + 1][len]);
}
void dfs2(int s) {for(const int to : e[s]) {if(to == father[s]) continue;dfs2(to);mark[s] += mark[to];}x = lca(s, b1), y = lca(s, b2);if(!mark[s] && ((x == s || (y == s))) && dep[s] >= dep[target]) ++ans;
}
int main() {cin >> n >> a;rep(i, 1, n - 1) {cin >> x >> y;e[x].push_back(y);e[y].push_back(x);}dfs(1, 0);init();rep(i, 1, a) {cin >> x >> y;z = lca(x, y);++mark[x], ++mark[y];--mark[z], --mark[father[z]];}cin >> b1 >> b2;target = lca(b1, b2);dfs2(1);cout << ans;return 0;
}

复杂度 \(O(n\log n + a)\), 常数略大。

相关新闻

  • OpenSSH漏洞修复
  • some plan
  • 复杂背景验证码的识别思路与图像处理方法

最新新闻

  • TCL脚本自动化CodeWarrior IDE与调试器:嵌入式DSP性能测试实战
  • ZLUDA:如何在AMD显卡上无缝运行CUDA应用程序的完整指南
  • OCR项目全链路性能评估与优化实战:从文本提取到结构化输出
  • MPC5200嵌入式开发:图形配置工具与模块初始化实战指南
  • Windows本地AI编码工作流:Claude Code+GLM-5+Superpowers实战
  • 基于LPC845与SMBus的智能电池充电器:从硬件设计到闭环控制

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号