树链剖分
ThreeWater-
这个作者很懒,什么都没留下…
展开
-
树链剖分(转)
树链剖分就是把边哈希到线段树上的数据结构。 实现的话,用两个dfs处理数数的信息,重边以及轻边,然后就是一些线段树的操作了。 以下是一些概念: 记siz[v]表示以v为根的子树的节点数,dep[v]表示v的深度(根深度为1),top[v]表示v所在的重链的顶端节点,fa[v]表示v的父亲,son[v]表示与v在同一重链上的v的儿子节点(姑且称为重儿子),w[v]表示v与其父亲节点的连边(姑且称转载 2016-09-27 19:30:15 · 171 阅读 · 0 评论 -
hdu3966 树链剖分(入门,点)
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <vector> #pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; typedef long long原创 2016-10-03 14:39:01 · 334 阅读 · 0 评论 -
spoj375树链剖分 (链)
#include <cstdio> #include <cstring> #include <algorithm> const int N=50010; using namespace std; struct node { int u,v,w; }e[N]; struct d { int nxt,to; }edge[N<<1]; int cnt,tim,head[N]; int a[原创 2016-10-05 16:53:38 · 206 阅读 · 0 评论 -
poj3237 树链剖分
WA了N发, 每次取相反数的时候,都需要交换最大值和最小值,这样才能维护动态的平衡,因为lazy标志的原因,取相反数,没有更新到底,所以如果只维护一个最大值会出问题。#include <cstdio> #include <cstring> #include <algorithm> const int N=50010; using namespace std; struct node {原创 2016-10-05 17:21:38 · 207 阅读 · 0 评论 -
poj1986 (树链剖分+线段树或者LCA+RMQ)
求树上任意两点的距离#include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <iostream> #include <queue> #define INF 0x3f3f3f3f using namespace std; int n,m; #include <vector> const i原创 2017-03-07 08:58:29 · 359 阅读 · 0 评论 -
线性基+树链剖分(bzoj4568)
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=20005; const int m_base=60; ll read() { long long x=0,f=1; char ch=getchar(); while (ch<'0' || ch>'9') {if (ch=原创 2017-11-03 22:49:41 · 266 阅读 · 0 评论