#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std ;
#define AddEdge( s , t , d )Add( s , t , d ),Add( t , s , d )
#define MAXN 40010
#define L( t ) left[ t ]
#define K( t ) key[ t ]
#define R( t ) right[ t ]
#define S( t ) size[ t ]
#define MAXV 100100
#define ll long long
struct edge{
edge *next ;
int t , d ;
}*head[ MAXN ];
void Add(int s ,int t ,int d ){
edge *p =new( edge );
p -> t = t , p -> d = d , p -> next = head[ s ];
head[ s ]= p ;
}
int n , w ;
struct SBT{
int left[ MAXV ], right[ MAXV ], key[ MAXV ], size[ MAXV ], V , roof ;
SBT( ){
L(0)=R(0)=K(0)=S(0)=0;
}
void Init( ){
roof = V =0;
}
void update(int t ){
S( t )=S(L( t ))+S(R( t ))+1;
}
void Left(int&t ){
int k =R( t );
R( t )=L( k );update( t );
L( k )=
BZOJ-1468: Tree(树-点分治)
最新推荐文章于 2019-08-21 20:08:01 发布
这篇博客介绍了如何使用点分治算法解决BZOJ-1468树形问题。通过定义结构体SBT来实现树的维护,包括插入节点、更新节点、保持平衡等功能。博主详细解释了算法流程,并给出了完整的C++代码实现,最后展示了如何求解特定路径上的权值之和。
摘要由CSDN通过智能技术生成