克鲁斯卡尔重构树
HT008_123
家人们点点关注叭
展开
-
[NOI 2018]归程
题目描述: n个点,m条边的无向图,每个边有权值和高度。 每次询问给出出发点和最低高度,当边的高度高于最低高度时才可以通行,问从出发点可以到达离点1最近的点距离是多少 题目分析: 由于是无向图,先对点1跑单源最短路。 对图做克鲁斯卡尔重构树,由于是高于某个值才能通行,对边权降序排列,做小根堆,对出发的点走到最低不能走的位置,对子树内询问最小的距离即可 题目链接: NOI2018 归途 AC代码: #include <cstdio> #include <algorithm> #incl原创 2021-12-03 09:32:55 · 289 阅读 · 0 评论 -
[2021ICPC 上海] Life is a Game
题目描述: 给出一张无向连通图 有点权 有边权 每一次给你一个初始能量和初始点 每到达一个点可以收集点权能量 可以通过一个边的条件是当前能量大于等于边权 每个询问是最多收集多少能量 题目分析: 这类问题肯定是建立克鲁斯卡尔重构树做的 对于X点是否能通过就是能量[X的子树和]+初始能量值>=父节点点权 变换得 初始能量值>=父节点点权-能量[X的子树和] 这个柿子可以通过倍增快速得到答案 题目链接: Life is a Game AC代码: #include <iostream> #i原创 2021-11-30 13:00:33 · 601 阅读 · 0 评论 -
[算法学习] 克鲁斯卡尔重构树
题目1:CodeForces 1417 F Graph and Queries 对于一个无向图联通块内找最大值问题可以用并查集dfs序线段树来解决 但是这个题目存在删边操作 那么我们就把删边变为加边 对题目删除的边逆着进行克鲁斯卡尔重构树 即将两个节点的祖节点都连接在一个新点上 这样可以连通块内的点都是这个祖的子树节点 可以使用dfs序来解决 #include <iostream> #include <cstdio> const int maxm=1e6+100; struct no原创 2020-10-15 23:19:23 · 268 阅读 · 0 评论