辣雞的我終於開始學樹鏈剖分了,而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 摘要 線段樹的基本 建樹 區間查詢 單點修改 及高階操作 區間修改 單點查詢 區間修改 區間查詢 標記下傳 標記永久化 閱讀全文 樹鏈剖分用...