
树上操作
卡常带师
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
环套树
P1453先把环处理出来,然后对环上每个节点树形DP,然后环形DP就好//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()#define INF 0x3f3f3f3f#define DNF 0x7f#define DBG printf(".原创 2020-09-24 11:06:11 · 242 阅读 · 0 评论 -
牛客多校第七场 A National Pandemic
算是一个小技巧吧,所有题目在给定或者求出计算公式之后,都可以去朝着把恒定的值或者成对出现的值单独拿出来维护比如这个题 w - dis(x,y) = w - dep[x] - dep[y] + w * dep[LCA(x, y)] ,我们就会发现 w - dep[x] 为定值 , dep[y]可以通过维护次数那么重点在于dep[LCA(x,y)],这个地方是一个小技巧,我们可以通过修改根到x的路径上的每一条边,使得每条边权值+1,然后在维护答案的时候,query一下根到x的路径上的和就好了。具体.原创 2020-09-03 22:00:35 · 210 阅读 · 0 评论 -
牛客多校第四场 Ancient Distance
//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()#define INF 0x3f3f3f3f#define DNF 0x7f#define DBG printf("this is a input\n")#define fi first#.原创 2020-09-02 12:05:52 · 173 阅读 · 0 评论 -
牛客暑期多校训练营第一场 Infinite Tree
//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()#define INF 0x3f3f3f3f#define DNF 0x7f#define DBG printf("this is a input\n")#define fi first#.原创 2020-08-31 22:40:10 · 177 阅读 · 0 评论 -
P3233 世界树 虚树+树形DP
//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()#define INF 0x3f3f3f3f#define DNF 0x7f7f7f7f#define DBG printf("this is a input\n")#define fi f.原创 2020-08-19 21:43:57 · 206 阅读 · 0 评论 -
牛客练习赛67 牛妹的苹果树
题意:输出给定的点序号区间中两点间距离的最大值思路:考虑倍增思想,st[u][i] 代表从u号节点开始往后2^i个连续数中的直径的两个端点。st[u][i] 一定是由 st[u][i-1] 和 st[u + 2^(i-1)][i-1]转移过来的思考怎么转移,显然对应6种情况1.若两个块中的直径的端点俩俩之间不存在LCA,那么显然直径存在与两个块中的其中一个(2种)2.若两个块中的直径的端点俩俩之间存在LCA,那么显然对应四种情况,只需要选出其中最大的点对即可//#define原创 2020-08-15 18:00:56 · 191 阅读 · 0 评论 -
P5043 树哈希模版(以后还得找其他的模版更新
#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define p_queue priority_queue#define DBG printf("this is a input\n")#define fi first#define se second#define mk(a.原创 2020-05-21 22:58:33 · 169 阅读 · 0 评论 -
DFS序+BIT离线统计子树中小于该节点的数量+三元计数
#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define p_queue priority_queue#define DBG printf("this is a input\n")#define fi first#define se second#define mk(a.原创 2020-05-19 13:31:18 · 208 阅读 · 0 评论 -
点分治 模板
//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define DNF 0x7f#define DBG printf("this is a...原创 2020-04-30 09:33:58 · 144 阅读 · 0 评论 -
虚树+树形dp P2495
1.虚树的建立需要考虑dp方程,然后决定建树细节,不然会出错//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define DNF 0x...原创 2020-04-29 11:57:18 · 259 阅读 · 0 评论 -
基环森林
//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define DBG printf("this is a input\n")#defin...原创 2020-04-24 11:20:40 · 310 阅读 · 0 评论 -
求树上点集(带修改)的最小覆盖线段集合的值
结论,点集按dfs序从小到大首尾相连,则答案为距离和的二分之一#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define DBG pri...原创 2020-04-23 09:20:05 · 278 阅读 · 0 评论 -
AcWing353 经典的树上差分+动态开点+权值线段树合并
#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define DBG printf("this is a input\n")#define fi first#defi...原创 2020-04-20 10:38:41 · 316 阅读 · 1 评论 -
树上启发式合并CF600E
#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define DBG printf("this is a input\n")#define fi first#defi...原创 2020-04-19 13:03:42 · 251 阅读 · 0 评论 -
队列数组模拟+树的直径+二分+贪心 AcWing351
#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define DBG printf("this is a input\n")#define fi first#defi...原创 2020-04-18 17:46:09 · 137 阅读 · 0 评论 -
重链剖分求LCA
#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define DBG printf("this is a input\n")#define fi first#defi...原创 2020-04-13 15:08:55 · 154 阅读 · 0 评论 -
重链剖分-维护点权模版
#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define DBG printf("this is a input\n")#define fi first#defi...原创 2020-04-13 14:22:18 · 119 阅读 · 0 评论 -
树上差分之点差 P3128
#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define DBG printf("this is a input\n")#define fi first#defi...原创 2020-03-27 11:43:43 · 155 阅读 · 0 评论 -
kruskal建立最大树+树上倍增+LCA(存个板子)
#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define DBG printf("this is a input\n")#define fi first#defi...原创 2020-03-26 20:52:01 · 218 阅读 · 0 评论 -
树的直径
1.DP求树的直径void dfs(int u){ // dp[i]表示以i为根的最长树链 vis[u] = 1; for(int i = head[u] ; i != -1 ; i = edge[i].next) { int v = edge[i].t; if(!vis[v]) { d...原创 2020-03-02 21:07:55 · 408 阅读 · 0 评论 -
树的重心 poj1655
#include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>#include <queue>#include <set>#include <map>using namespace std;#define ...原创 2020-03-02 20:52:51 · 151 阅读 · 0 评论 -
tarjan?+并查集 求LCA T了3个点(懒得改) P3379
#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define DBG printf("this is a input\n")#define fi first#defi...原创 2020-03-01 15:34:51 · 200 阅读 · 0 评论