感覺之前拿點分治水過心裡過意不去,。。。。。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個。方法一 我是...