![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Tree(gragh)
文章平均质量分 69
a
aWty_
在 AFO 的边缘徘徊的 OIer
展开
-
天天爱跑步【NOIP2016 T4】
天天爱跑步原创 2022-07-21 11:29:11 · 234 阅读 · 0 评论 -
[NOIP2015 提高组] 运输计划
运输计划题目大意 给定一棵树和 mmm 条路径,现在可以让你把某一条边的权值改为 000,使得这些路径长度的最大值最小。算法分析20 pts 20pts20pts20pts 非常简单啊,就是那几个 m=1m = 1m=1 的点,直接 lcalcalca 处理出这条路径的长度,然后删去最大边就好了。100 pts 考虑二分答案,现在的问题就是如何实现 check(x)check(x)check(x)。 考虑找到一条边,使得路径长度大于 xxx 的所有路径都有这条边,并且减去这条边的边权原创 2022-05-28 16:22:46 · 201 阅读 · 0 评论 -
树上差分啊
树上差分大概的介绍 树上的差分和普通的区间差分其实差不多,都是解决离线多次修改最后一次查询的问题的(不要告诉我你不会数组差分qwq)。 前置芝士:倍增求 LCALCALCA、正常的差分点的差分 比如这样一个问题,每次修改对于树上的一条路径,这条路径上的所有点的点权加 kkk,最后查询求某个点的点权。 考虑模仿普通数组的差分做法,对于树上的节点维护差分数组 ccc,我们考虑将一条路径(起点和终点分别为 s,ts, ts,t)上的所有点的权值加 kkk,那么差分数组应该这样变化:c[s]+原创 2022-05-28 11:12:09 · 141 阅读 · 0 评论 -
树的直径(补充:另一种 DP)
树的直径 设 dxd_xdx 表示以 xxx 为根节点到这棵树中最远的距离,显然有:dx=maxex to yi∈Ex{dyi+value(e)} d_x = \max_{e_{x \; to \; y_i} \in E_x} \{ d_{y_i} + value(e) \} dx=extoyi∈Exmax{dyi+value(e)} 设 fxf_xfx 表示经过 xxx 的最长链的长度,我们可以发现他就可以拆成四个部分:x to yix \; to \; y_ix原创 2022-05-28 08:47:26 · 94 阅读 · 0 评论 -
严格次小生成树
严格次小生成树 板子题传送门:luogu P4180定义 严格次小生成树就是说我们设最小生成树选择的边集是 EME_MEM,严格次小生成树选择的边集是 ESE_SES,那么需要满足(value(e)value(e)value(e) 表示这个边的边权):∑e∈EMvalue(e)<∑e∈ESvalue(e) \sum_{e \in E_M}value(e) < \sum_{e \in E_S}value(e) e∈EM∑value(e)<e∈ES∑value(e)分原创 2022-03-19 15:53:36 · 599 阅读 · 3 评论 -
Kruskal 重构树
Kruskal 重构树原创 2022-03-13 11:39:03 · 1675 阅读 · 0 评论 -
倍增求LCA
倍增求 LCA#include<bits/stdc++.h>using namespace std;#define SIZE #define MAXN 100100#define MAXM 2 * MAXNint n = 0; int m = 0;int tot = 0;int first[MAXN] = { 0 };int nxt[MAXM] = { 0 };int to[MAXM] = { 0 };void add(int x, int y){ nx原创 2021-10-13 22:58:57 · 83 阅读 · 0 评论 -
kruskal
kruskal#include<bits/stdc++.h>using namespace std;#define MAXN 10010#define MAXM MAXN * (MAXN - 1)/* 最小生成树 */int n = 0, m = 0;struct Tedge{ int x; int y; int value;}edge[MAXM];bool comp(Tedge a, Tedge b){ return a.value < b.value;原创 2021-10-13 22:54:48 · 122 阅读 · 0 评论 -
关于树的重心
一、定义对于树上的每一个点,计算其所有子树中最大的子树节点数,这个值最小的点就是这棵树的重心。(这里以及下文中的“子树”都是指无根树的子树,即包括“向上”的那棵子树,并且不包括整棵树自身。) 以上内容摘自树的重心 - OI Wiki 我们要求得一棵树的重心,我们就需要一个 size[MAXN] 数组。而这个数组的值需要从叶子结点往上来进行统计。对于叶子结点,我们知道 "以它为根的子树的大小是1" ,而对于非叶子节点 x 来说...原创 2021-10-11 20:25:15 · 177 阅读 · 0 评论 -
浅谈树的直径
一、定义:我们将一棵树T=(V,E)的直径定义为max(u,v) (u,v∈V),也就是说,树中所有最短路径距离的最大值即为树的直径。(就是树中的最长路径的长度)二、求解树德直径: 求得树的直径有两种方法,一种是两边 bfs (或者两边dfs)就能搞定的算法。还有一种就是树形DP。我们先来了解第一种,就是两遍dfs(或bfs)的算法。 引理:对于树上任意一点 P,找到离它最远的节点 Q。在找到离节点 Q 最远的节点 W。路径WQ的长度就是树的直径。...原创 2021-10-11 19:32:25 · 714 阅读 · 1 评论