樹鏈剖分題目彙總 板子

2021-09-20 06:49:49 字數 2229 閱讀 8823

辣雞的我終於開始學樹鏈剖分了,而ly聚聚早都會了qaq.....

首先是乙個板子題,就是板子

題目大意:四種操作,板子。

思路:板子。線段樹維護分出來的鏈。

accode(板子):

//#pragma comment(linker, "/stack:1024000000,1024000000")

#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define pair pair//#define max(a,b) (a)>(b)?(a):(b)

//#define min(a,b) (a)<(b)?(a):(b)

#define clean(a,b) memset(a,b,sizeof(a))// ??

//std::ios::sync_with_stdio(false);

// register

const int maxn=1e5+10;

const int inf32=0x3f3f3f3f;

const ll inf64=0x3f3f3f3f3f3f3f3f;

const ll mod=1e9+7;

const double pi=acos(-1.0);

const double eps=1.0e-8;

class segment

public : void setmod(int mod)

public : void build(int l,int r,int rt,int a)int mid=(l+r)>>1;

build(l,mid,rt<<1,a);build(mid+1,r,rt<<1|1,a);

tree[rt]=(tree[rt<<1]+tree[rt<<1|1]+p)%p;

} public : void update(int ql,int qr,int val,int l,int r,int rt)int mid=(l+r)>>1;

pushdown(rt);

if(ql<=mid) update(ql,qr,val,l,mid,rt<<1);

if(qr>mid) update(ql,qr,val,mid+1,r,rt<<1|1);

tree[rt]=(tree[rt<<1]+tree[rt<<1|1]+p)%p;

} public : int query(int ql,int qr,int l,int r,int rt)

public : void show(int l,int r,int rt)

};struct node1

};segment seg;

node1 edge[maxn<<2];

int head[maxn],ecnt;

int deep[maxn],fa[maxn],size[maxn],son[maxn];

int idx[maxn],icnt;//重新標號

int top[maxn];

int a[maxn],b[maxn];

int n,m,r,p;

void intt()

void addedge(int u,int v,int val)

int dfs1(int u,int fa,int dep)

}return size[u];

}void dfs2(int u,int topfa)

int querypath(int l,int r)

void updatesubtree(int rt,int val)

int querysubtree(int rt)

int main()

for(int i=1;i好了,板子已經有了,剩下的就是一些練習了:

狀態:已ac,題解:

狀態:已ac,題解:

狀態:已ac,題解:

狀態:已ac,題解:

狀態:已ac,題解:

狀態:已ac,題解:

-----樹鏈剖分專題暫時告一段落了,雖然寫的都是些水題,但我也初步了解樹鏈剖分了,以後碰到好的題目再加進來吧。---------

update:2019/5/15/ 13:54.

寫之前的專題的時候碰到了幾道樹剖的題:雖然不算難,但一起總結起來吧。

題解:

樹鏈剖分板子

個人理解 樹鏈剖分最重要的作用是實現了重鏈上的節點序號都是連續的,這樣對於更改和查詢一條樹鏈就變成了區間操作,可以用線段樹實現。include using namespace std define lson rt 1 define rson rt 1 1 const int maxn 2e5 5 i...

樹鏈剖分 樹鏈剖分講解

好了,這樣我們就成功解決了對樹上修改查詢邊權或點的問題。下面放上 vector v maxn int size maxn dep maxn val maxn id maxn hson maxn top maxn fa maxn 定義 int edge 1,num 1 struct tree e ma...

演算法入門 樹鏈剖分 輕重鏈剖分

目錄 3.0 求 lca 4.0 利用資料結構維護資訊 5.0 例題 參考資料 資料結構入門 線段樹 發表於 2019 11 28 20 39 dfkuaid 摘要 線段樹的基本 建樹 區間查詢 單點修改 及高階操作 區間修改 單點查詢 區間修改 區間查詢 標記下傳 標記永久化 閱讀全文 樹鏈剖分用...