当前位置: 首页 > news >正文

算法竞赛进阶指南.闇の連鎖

题目

352. 闇の連鎖
在这里插入图片描述

算法标签: 树上差分, L C A LCA LCA, 倍增

思路

对于一个无向图, 第一次切断树边, 第二次切非树边, 一共多少种方案使得图不连通, 点数和边数都很大, 时间复杂度不能是 O ( n 2 ) O(n ^ 2) O(n2)级别的, 对于每一条非树边, 都能计算出删除当前边后, 对于树边还需要删除哪些边, 如何快速的给树上的边加上一个树, 以及快速的求每个边最终的值, 可以使用树上差分

代码

#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;const int N = 100010, M = N << 1, K = 20;int n, m;
int head[N], ed[M], ne[M], idx;
int fa[N][K], depth[N];
int w[N], ans;void add(int u, int v) {ed[idx] = v, ne[idx] = head[u], head[u] = idx++;
}void dfs(int u, int pre, int dep) {depth[u] = dep;fa[u][0] = pre;for (int k = 1; k < K; ++k) {fa[u][k] = fa[fa[u][k - 1]][k - 1];}for (int i = head[u]; ~i; i = ne[i]) {int v = ed[i];if (v == pre) continue;dfs(v, u, dep + 1);}
}int lca(int u, int v) {if (depth[u] < depth[v]) swap(u, v);for (int k = K - 1; k >= 0; --k) {if (depth[fa[u][k]] >= depth[v]) {u = fa[u][k];}}if (u == v) return u;for (int k = K - 1; k >= 0; --k) {if (fa[u][k] != fa[v][k]) {u = fa[u][k];v = fa[v][k];}}return fa[u][0];
}int calc(int u, int pre) {int tmp = w[u];for (int i = head[u]; ~i; i = ne[i]) {int v = ed[i];if (v == pre) continue;int val = calc(v, u);if (val == 0) ans += m;else if (val == 1) ans += 1;tmp += val;}return tmp;
}int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);memset(head, -1, sizeof head);cin >> n >> m;for (int i = 0; i < n - 1; ++i) {int u, v;cin >> u >> v;add(u, v), add(v, u);}dfs(1, -1, 1);for (int i = 0; i < m; ++i) {int u, v;cin >> u >> v;int f = lca(u, v);w[u]++, w[v]++;w[f] -= 2;}calc(1, -1);cout << ans << endl;return 0;
}
http://www.xdnf.cn/news/281323.html

相关文章:

  • TF-IDF与CountVectorizer、TfidfVectorizer的联系与区别
  • C++日志系统实现(一)
  • 每日c/c++题 备战蓝桥杯(洛谷P1190 [NOIP 2010 普及组] 接水问题)
  • 56认知干货:智能化产业
  • 2025-05-04 Unity 网络基础6——TCP心跳消息
  • TestBench激励与待测
  • 配置和使用持久卷
  • 如何克服情绪拖延症?
  • ​​工业机器人智能编程:从示教器到AI自主决策​​
  • [Java]Java的三个阶段
  • htop电脑性能检测
  • MYSQL数据库突然消失
  • 【漫话机器学习系列】238.训练误差与测试误差(Training Error And Test Error)
  • [特殊字符] 人工智能大模型之开源大语言模型汇总(国内外开源项目模型汇总) [特殊字符]
  • 引入spdlog后程序链接很慢
  • 使用 OpenCV 和 Dlib实现轮廓绘制
  • 「Mac畅玩AIGC与多模态18」开发篇14 - 多字段输出与结构控制工作流示例
  • 【MySQL】用户管理
  • Javascript学习笔记1——数据类型
  • 【哈希表的简单介绍】
  • Python|Pyppeteer实现自动登录小红书(32)
  • PyQt5基本介绍
  • 第八章.javaI/O和反射机制
  • 【深度解析】DCN-V2:Google新一代特征交叉网络,如何实现推荐系统精准度飞跃?
  • [硬件电路-7]:模拟电路常见元器件 - 功率检测与PD光电二极管
  • SpringBoot简介详解:从入门到精通
  • 学习方法讨论——正论科举精神的内核
  • 51单片机入门教程——每个音符对应的重装载值
  • 解决在 Linux 中 WPS 字体缺失问题
  • 算法学习时段效能分布