SPOJ QTree5 樹鏈剖分

2021-08-03 13:28:35 字數 1248 閱讀 6281

感覺之前拿點分治水過心裡過意不去,。。。。。mdzz,我還是打了乙份樹鏈剖分的code,具體方法與qtree4相同(詳見**),維護線段樹的合併時的值。

#include

#define mid ((l+r)>>1)

#define pf push_front

using

namespace

std;

const

int n=1e5+1e2;

const

int inf=0x3f3f3f3f;

struct node

}seg[n<<2];

int n,dfs_cnt,cnt,cs,tot,q,xx,yy;

int fa[n],head[n],id[n],dfn[n],top[n],sz[n],s[n],c[n];

struct datae[n<<1];

int ls[n<<2],rs[n<<2],root[n];

deque

pat;

multiset

ch[n];

void addedge(int u,int v)

inline

void dfsf(int u)

inline

void dfss(int u,int f)

inline node merge(node& a,node& b,int l1,int l2,int l3)

inline

void maintain(int rt,int x)

inline

void build(int rt,int l,int r)else

}inline

void find(int u)

}inline

void update(int rt,int l,int r,int i)

maintain(rt,u);

}else

}inline

int query(int rt,int l,int r,int i)

res=min(res,seg[rt].l+pat[i+1]);

return res;

}else

}inline

void read(int &res)

int main()

printf("%d\n",query(1,1,s[1],1));

}else

}return

0;}

SPOJ QTREE 樹鏈剖分

樹鏈剖分學習 核心 節點u的輕兒子為v 輕兒子的性質 size v size u 2 故 每走一條輕鏈,節點數減少一半 又因 兩個節點之間的路徑,必為重鏈和輕邊交替 故 從根結點到樹上任意點經過的輕邊以及重鏈都不會超過logn條 樹鏈剖分模版題 題意 有一棵n個節點的樹 1 n 10000 n 1條...

SPOJ QTREE2 樹鏈剖分

題意 有一棵n個節點的樹 1 n 10000 n 1條邊,邊的編號為1 n 1,每條邊有乙個權值,要求模擬兩種操作 1 dist a b 求 點a到點b之間的距離 2 kth a b k 求從a出發到b遇到的第k個節點的編號 qtree系列的第二題。求dist就不用說啦,主要是求第k個。方法一 我是...

SPOJ QTREE2 樹鏈剖分

題意 有一棵n個節點的樹 1 n 10000 n 1條邊,邊的編號為1 n 1,每條邊有乙個權值,要求模擬兩種操作 1 dist a b 求 點a到點b之間的距離 2 kth a b k 求從a出發到b遇到的第k個節點的編號 qtree系列的第二題。求dist就不用說啦,主要是求第k個。方法一 我是...