![](https://img-blog.csdnimg.cn/20210918212221998.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
图论 - 树论
文章平均质量分 96
树论 树上问题
繁凡さん
只想当个小透明,就图一乐^q^,希望可以做出一些微小的贡献(目前研究方向:自然语言处理、深度学习中的对抗攻击、元学习,欢迎大佬们来与我交流^0^)
展开
-
模板 - 支配树
整理的算法模板合集: ACM模板题目描述 给定一张有向图,求从1号点出发,每个点能支配的点的个数(包括自己)# include <iostream># include <cstdio># include <cstring># include <queue># define sz 20# define FOR(i,st,ed) for(int i=st;i<=ed;++i)# define _FOR(tu,u) for(int v,i原创 2020-09-23 22:23:41 · 230 阅读 · 0 评论 -
解题报告:AcWing 352. 闇の連鎖(树上差分、方案统计)
https://www.acwing.com/problem/content/354/在没有附加边的情况下,我们发现这是一颗树,那么再添加条附加边(x,y)后,会造成(x,y)之间产生一个环如果我们第一步截断了(x,y)之间的一条路,那么我们第二次只能截掉(x,y)之间的附加边,才能使其不连通;我们将每条附加边(x,y)称为将(x,y)之间的路径覆盖了一遍;因此我们只需要统计出每条主要边被覆盖了几次即可;对于只被覆盖一次的边,第二次我们只能切断(x,y)边,方法唯一;如果我们第一步切断了被覆盖原创 2020-07-23 23:55:13 · 248 阅读 · 0 评论 -
解题报告(八) prufer 序列与 Cayley 公式(ACM / OI)超高质量题解
繁凡出品的全新系列:解题报告系列 —— 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 111 为基准。这样大家在学习算法的时候就可以执行这样的流程:%阅读我的【学习笔记】 / 【算法全家桶】学习算法 ⇒\Rightarrow⇒ 阅读我的相应算法的【解题报告】获得高质量题单 ⇒\Rightarrow⇒ 根据我的一句话题解的提示尝试自己解决问题 ⇒\Rightarrow⇒ 点开我的详细题解链.原创 2021-03-03 21:52:21 · 1644 阅读 · 3 评论 -
P5801 [SEERC2019]Game on a Tree(ACM - ICPC 2019)(树的最大匹配)(完美匹配)
P5801 [SEERC2019]Game on a Tree(ACM - ICPC 2019)(树的最大匹配)完美匹配:如果一个图的某个匹配中,所有的顶点都是匹配点,那么它就是一个完美匹配。#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<cmath>#include<vector>using namesp原创 2020-09-10 21:04:51 · 1014 阅读 · 0 评论 -
判断一个图是否为树(有向图以及无向图)
http://www.cppblog.com/fm369o802340/archive/2012/12/10/196151.html判断一个图是否为树1. 无向图(hdu 1272 小希的迷宫)2. 有向图(hdu 1325 Is It A Tree?)题目大意:判断一个有向图是不是一棵树判断条件:无环,一个根节点,(只有一个入度为0的结点,不存在入度大于1的结点)#include<iostream>#include<algorithm>#include<cst原创 2020-11-06 21:09:10 · 5263 阅读 · 0 评论 -
【算法笔记】基环树
基环树,也是环套树,是一种有 nnn 个点 nnn 条边的图,简单地讲就是树上在加一条边。它形如一个环,环上每个点都有一棵子树的形式。基环内向树:每个点出度为1(因此每个环上点的子树,儿子指向父亲)基环外向树:每个点入度为1(因此每个环上点的子树,父亲指向儿子)基环树的关键就是找到环,可以先把环当作这个无根树的 “根” ,也就是把环缩点(先不管它),这样一颗基环树就变成了一个普通的树,然后我们先按照解决普通树的方法对“根”的所有子树依次处理求解答案,最后在单独对环上所有的点进行操作求解最终答案即可。原创 2020-10-07 11:12:01 · 3306 阅读 · 3 评论 -
【牛客每日一题】4.15 Treepath 题解(树上dfs/树形DP)
题目链接:https://ac.nowcoder.com/acm/problem/14248来源:牛客网题目描述给定一棵n个点的树,问其中有多少条长度为偶数的路径。路径的长度为经过的边的条数。x到y与y到x被视为同一条路径。路径的起点与终点不能相同。输入描述:第一行一个数n表示点的个数;接下来n-1行,每行两个整数x,y表示边;保证输入数据形成一棵树;1<=n<=100000...原创 2020-04-15 23:25:41 · 438 阅读 · 0 评论 -
【学习笔记】树的计数,prufer(Prüfer)编码,Cayley公式及相应例题
目录1、pruferpruferprufer编码1)无根树转化为prufer序列2)prufer序列转化为无根树。2、Cayley公式1)由Cayley公式得到四个推论例题1、P4981 父子例二、P4430 小猴打架部分来自大佬的博客,加入一些自己的理解。1、pruferpruferprufer编码首先引入pruferpruferprufer编码(其实是Pru¨ferPrüferPru¨f...原创 2020-03-29 22:14:37 · 1974 阅读 · 1 评论 -
luogu P4408 [NOI2003]逃学的小孩(树的直径)
整理的算法模板合集: ACM模板看了半天的题原来没有告诉你三个点的坐标,不然直接跑最短路即可。要求最长的时间,所以我们要自己找到三个点,而在树中最长的路径也就是树的直径。那么本题就可以简化为:在一棵无根树上,找A,B,CA,B,CA,B,C三个点,使得AB+BC(AC>BC)AB+BC(AC>BC)AB+BC(AC>BC)或AC+AB(BC>AC)AC+AB(BC>AC)AC+AB(BC>AC)最大。我们假设AC>BCAC>BCAC>BC,那么答原创 2020-09-13 21:55:11 · 233 阅读 · 0 评论 -
模板 - 树上问题(树的直径、动态查询树的直径、树的重心)
整理的算法模板合集: ACM模板目录一、树的直径树形DP两次DFS / BFS(找到直径的两个端点)二、动态修改树的边权并求每个时刻的直径(线段树)三、树的重心一、树的直径树的直径满足如下性质:若有多条直径,则所有的直径之间皆有公共点。直径的两端一定是叶子。树中距离某一直径端点最远的点,至少有一个是该直径的另一个端点。对于树上任意一个点,与之距离最远的一个点,至少有一个直径的端点。给你一个无权无向的树。编写程序以输出该树中最长路径(从一个节点到另一个节点)的长度。在这原创 2020-09-13 17:41:14 · 1187 阅读 · 0 评论 -
【树的直径】解题报告: luogu P3629 [APIO2010]巡逻(树的直径,位运算成对变换,思维)
题目链接:P3629 [APIO2010]巡逻首先看题,从1号结点开始,全部遍历并回到1号结点会恰好经过所有的边两次,这样总长度为 2∗(n−1)2*(n-1)2∗(n−1)。那么如果建立一条路以后,由题意可知新道路必须经过恰好一次,也只能经过一次,所以新路从x到y形成一个环,这样就可以用新路的权值1来代替老路径中从x到y的路径1次,也就是说从x到y之间的路径在建立了新路以后只需要再经过一次就行了。所以我们要求最短,肯定要把整棵树上的最长链也就是树的直径省掉答案最优。所以当k = 1 时,我们找到最原创 2020-06-13 17:59:59 · 296 阅读 · 0 评论