bzoj1036 樹的統計 樹鏈剖分 LCT

2021-07-26 22:51:50 字數 1960 閱讀 4695

ac通道:

【題解】

看到題目,發現是樹剖一眼題,所以就秒掉了。

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

typedef long long ll;

#define file "read"

#define maxn 30010

#define inf 1000000000

#define up(i,j,n) for(int i=j;i<=n;++i)

#define dn(i,j,n) for(int i=j;i>=n;--i)

#define cmax(a,b) a=max(a,b)

#define cmin(a,b) a=min(a,b)

namespace init

inline int read()

while(isdigit(ch))

return x*f;

}}using namespace init;

struct nodee[maxn*2];

int n,m,z,len,link[maxn],size[maxn],son[maxn],w[maxn],f[maxn],top[maxn],deep[maxn],sum[maxn*8],maxx[maxn*8];

void insert(int x,int y)

void dfs(int x)

}void dfs(int x,int temp)

void relord(int p)

void updata(int p,int l,int r,int x,int v)

int findmax(int p,int l,int r,int x,int y)

int findsum(int p,int l,int r,int x,int y)

int askmax(int x,int y)

int asksum(int x,int y)

int main()

dfs(1); dfs(1,1);

up(i,1,n)

m=read();

up(i,1,m)

return 0;

}

然後我發現這題被貼上了lct的標籤,於是去搞了一發lct,比樹剖要慢一些。

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

#define file "read"

#define maxn 30010

#define inf 1000000000

#define up(i,j,n) for(int i=j;i<=n;++i)

#define dn(i,j,n) for(int i=j;i>=n;--i)

namespace init

inline int read()

while(isdigit(ch))

return x*f;

}}using namespace init;

int n,m,v[maxn],x[maxn],y[maxn];

namespace link_cut_tree

bool isroot(int x)

void updata(int x)

void pushdown(int x)

} void rotate(int x)

void splay(int x)

void access(int x)

void reverse(int x)

void linkk(int x,int y)

void split(int x,int y)

}int main()

}

BZOJ 1036 樹的統計 Count 樹鏈剖分

題目大意 一棵樹上有n個節點,編號分別為1到n,每個節點都有乙個權值w。我們將以下面的形式來要求你對這棵樹完成一些操作 i.change u t 把結點u的權值改為t ii.qmax u v 詢問從點u到點v的路徑上的節點的最大權值 iii.qsum u v 詢問從點u到點v的路徑上的節點的權值和 ...

BZOJ 1036 樹的統計 樹鏈剖分模板

樹上n個點,支援單點修改,區間查詢最大值和sum和。此處只講大體思路,樹鏈剖分的詳細原理請移步op x top x top x 即該點的 dfs dfsdf s區間修改和區間查詢,就是先處理出兩點之間的樹鏈,由於樹鏈上的點的 dfs dfsdf s下面的 包括了區間修改和單點修改,以及區間查詢最大值...

樹鏈剖分 線段樹 bzoj1036 樹的統計

一棵樹上有n個節點,編號分別為1到n,每個節點都有乙個權值w。我們將以下面的形式來要求你對這棵樹完成一些操作 i.change u t 把結點u的權值改為t ii.qmax u v 詢問從點u到點v的路徑上的節點的最大權值 iii.qsum u v 詢問從點u到點v的路徑上的節點的權值和 注意 從點...