40 1
1 22 3
4add 1 3 1
query 0
query 1
query 233
2樹鏈剖分線段樹裸題。值得注意的是維護一下出棧序,這樣子樹就是該點到出棧+1的位置。在lca的過程中直接查詢/維護即可
下面是**
#include #include #include #include #include #define ls p<<1#define rs ls|1
#define lson l,mid,ls
#define rson mid+1,r,rs
#define im int mid = (l + r) >> 1
using namespace std;
const int n = 1100000;
int son[n],siz[n],fa[n],top[n],dep[n];
int idx[n],cnt2;
int to[n<<1],next[n<<1],head[n],cnt1;
int sec[n<<1];
int n,m;
class readin
public:
inline int read()
return x;
}inline char getc()
}rd;
class segmenttree
public:
int query(int l,int r,int p,int x,int y)
im;if(laz[p])
int re=0;
if(x<=mid)
re+= query(lson,x,y);
if(y>mid)
re+= query(rson,x,y);
return re;
}void change(int l,int r,int p,int x,int y,int c)
im;if(laz[p])
if(x<=mid)
change(lson,x,y,c);
if(y>mid)
change(rson,x,y,c);
sum[p]=sum[ls]+sum[rs];
}}tr;
class treechaindissection }}
void dfs2(int p,int t)
void lcac(int x,int y,int z)
if(dep[x]
tr.change(1,n,1,idx[y],idx[x],z);
}}tcd;
class pre
public:
void init()
m=rd.read();
}}pr;
void solve()
else
}}#undef int
int main()
BZOJ 3306 樹 樹鏈剖分
和bzoj 3083比就是弱化版了。樣例都有點像?include include using namespace std const int n 100005,m n 3,inf 0x7fffffff int read int next m to m head n sz n son n top n ...
樹鏈剖分 樹鏈剖分講解
好了,這樣我們就成功解決了對樹上修改查詢邊權或點的問題。下面放上 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...
樹鏈剖分 bzoj2243
time limit 20 sec memory limit 512 mb submit 2492 solved 960 submit status 給定一棵有n個節點的無根樹和m個操作,操作有2類 1 將節點a到節點b路徑上所有點都染成顏色c 2 詢問節點a到節點b路徑上的顏色段數量 連續相同顏色...