![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树论
lixuwei2333
这个作者很懒,什么都没留下…
展开
-
Frank Sinatra【树上莫队】【分块】【区间mex】
题目链接:https://vjudge.net/problem/Gym-100962F题目大意:给你一棵树,边有边权,每次询问一条链上边权集合的mex。用莫队加分块维护区间mex。有一个很重要的点是,边权最大到1e9,但是显然大于 N 的权值对答案一定没有贡献,这样的话数组就可以开的下了。#include <bits/stdc++.h>#define rep(...原创 2019-10-25 16:46:31 · 451 阅读 · 0 评论 -
No Link, Cut Tree!【长链剖分】【dsu on tree】
题目链接:https://vjudge.net/problem/Gym-101484F原题目给的是一棵完全二叉树,所以暴力就可以过。这里假设它是一颗一般树,那么可以用dsu on tree+线段树用O(N*logN*logN)的时间复杂度解决,或者用长链剖分+线段树+前缀最大值+后缀最大值做到O(N*logN)的时间复杂度。dsu on tree 做法如下:线段树维护当前每层的剩余...原创 2020-06-20 17:41:12 · 316 阅读 · 0 评论 -
Kruskal重构树
题目链接:https://www.luogu.org/problem/P4197题目大意:有N座山峰,每座山峰有他的高度hi。有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走.现在有Q组询问,每组询问询问从点v开始只经过困难值小于等于x的路径所能到达的山峰中第k高的山峰,如果无解输出−1。#include <bits/stdc++.h&...原创 2019-09-20 17:00:59 · 113 阅读 · 0 评论 -
[JSOI2016]最佳团体【01分数规划】【树形背包】
题目链接:https://www.luogu.org/problem/P4322两个板子合一块#include <bits/stdc++.h>#define rep(i, a, b) for(int i = (a); i <= (b); i++)#define per(i, a, b) for(int i = (a); i >= (b); i--)#defi...原创 2019-09-20 09:47:19 · 130 阅读 · 0 评论 -
长链剖分模板
题目链接:https://codeforces.com/contest/1009/problem/F题目大意:给你一棵树,定义d(x,i)表示x子树内和x距离为i的节点数,对每个x求使d(x,i)最大的i,如有多个输出最小的。长链剖分是一种类似dsu on tree的小trick,可以把维护子树中只与深度有关的信息做到线性的时间复杂度。#include <bits/stdc++...原创 2019-09-18 11:05:56 · 178 阅读 · 0 评论 -
树上启发式合并与dsu on tree
题目链接:https://codeforc.es/contest/600/problem/E题目大意:给一颗以1为根的树,共n个点。点有颜色,颜色从1-n编号。问每颗子树中出现次数最多的颜色 的编号之和。启发式合并做法:#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#includ...原创 2019-09-13 10:58:28 · 388 阅读 · 0 评论 -
最长道路tree【点分治】
题目链接:https://ruanx.pw/bzojch/p/2870.html?tdsourcetag=s_pcqq_aiomsg用map记录子树中每个最小路径长度的最大边长,定义map从大到小排序,然后用双指针的方法进行路径合并。#include <bits/stdc++.h>#include <ext/pb_ds/assoc_container.hpp>...原创 2019-08-17 08:44:14 · 177 阅读 · 0 评论 -
Acesrc and Travel【换根树dp】
考虑固定根(起点)情况下的最优解,可以用dp容易求出。考虑换根操作,假设当前根为u,需要换成v。(v是以1为根情况下u的子节点)那么需要保证v->u后,u不能再返回v,所以需要记录最优值和次优值。当发现u的最优值不经过v,用最优值对v进行转移,否则用次优值进行转移。基本做法就是这样,但是在实际写代码的过程中,发现了2种需要特判的情况。第一种:在写dfs2时发现u没有次优解...原创 2019-08-15 10:05:37 · 212 阅读 · 0 评论 -
Rikka with Travels【换根树dp】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6686不写题解了,写不动还有其他简单的做法#include <bits/stdc++.h>#define rep(i, a, b) for(int i = (a); i <= (b); i++)#define per(i, a, b) for(int i = (a);...原创 2019-08-20 08:59:15 · 291 阅读 · 2 评论 -
[HAOI2015]树上染色 【树形背包】
题目链接:https://vjudge.net/problem/HYSBZ-4033考虑每个边对答案的贡献dp[i][j]表示以i为根的子树中共选取j个黑色的点,对答案的贡献。#include <bits/stdc++.h>#define rep(i, a, b) for(int i = (a); i <= (b); i++)#define per(i, a, ...原创 2019-10-25 17:27:56 · 131 阅读 · 0 评论 -
树形背包模板
题目大意:给一个N个点的森林,从中选取恰好M个点,当你选择一个点时,必须选择他的父亲节点。问能获得的最大点权和是多少。数据范围见题目链接:https://www.luogu.org/problem/P2014#include <bits/stdc++.h>#define rep(i, a, b) for(int i = (a); i <= (b); i++)#d...原创 2019-07-26 11:02:43 · 260 阅读 · 0 评论 -
Ehab and the Big Finale【交互】【树链剖分】
题目链接:https://codeforces.com/contest/1174/problem/F参考题解:https://dudulu.net/blog/?p=1696#include <bits/stdc++.h>#define rep(i, a, b) for(int i = (a); i <= (b); i++)#define per(i, a, b) ...原创 2019-06-04 21:34:45 · 258 阅读 · 0 评论 -
2019西安邀请赛J (树上路径异或和为0计数问题)【点分治】
题目链接:https://nanti.jisuanke.com/t/39277每条合法(异或为0)的路径的贡献为路径两端点数的乘积。当点分治确定root后,需要求出以root为根的各节点的siz。然后按照路径两端点是否在同一颗子树上进行合并。#include <bits/stdc++.h>#include <ext/pb_ds/assoc_container....原创 2019-05-29 10:57:56 · 570 阅读 · 0 评论 -
虚树模板
copy from:https://li-fish.github.io/2018/09/04/cjtk4cs8l008s04c2emfcercy/题目链接:https://www.luogu.org/problemnew/show/P2495题目大意:给一颗树,根为1,边有边权。m次询问,每次询问给出k个关键点,割边使得根与任意关键点不连通,求最小花费。#include <bi...原创 2019-05-31 10:43:36 · 183 阅读 · 0 评论 -
【启发式合并】【主席树】HDU - 6504 - Problem E. Split The Tree
题目链接:https://cn.vjudge.net/problem/HDU-6504做法一:启发式合并,用unorder_map维护每个子树的颜色信息。需要用到第x个颜色的总数,和第x个颜色在第i棵子树内的个数来判断删除第i棵子树后的答案变化。#include<bits/stdc++.h>#define rep(i, a, b) for(int i = (a); i ...原创 2019-05-06 19:40:48 · 280 阅读 · 2 评论