我已經無力爆粗了。。。。。。。md這c++怎麼能在編譯了、執行了以後,最後發現居然是之前的版本?喵喵喵?
考慮兩條路徑相交,那麼其中一條的lca一定在另一條路徑上。所以開兩個樹狀陣列維護之前路徑的資訊和之前路徑的lca的位置。統計一下,然後更新,再做下一條路徑即可。
#includeusing namespace std;
const int maxn=1e6+10;
const int maxm=2e6+10;
int n,cnt,q;
long long ans;
int head[maxn],fa[maxn],son[maxn],siz[maxn],top[maxn],depth[maxn];
int nxt[maxm],to[maxm];
int dfn[maxn],ys[maxn],tot;
int read()
int lowbit(int x)
void update(int *t,int x,int v)
int query(int *t,int x)
void add(int x,int y)
void dfs1(int u,int f)
}void dfs2(int u,int tp)
dfs2(son[u],tp);
for(int i=head[u];i!=-1;i=nxt[i])
r[u]=tot;
}int lca(int x,int y)
return depth[x]}int calc(int x,int y,int z)
int main()
dfs1(1,-1);
dfs2(1,1);
while(q--)
cout
}
校內模擬 層流 樹鏈剖分
給出一棵樹,給出n條邊,問這些邊兩兩之間是否滿足兩個條件之一 覆蓋對方或被對方覆蓋 沒有相交。如果都滿足輸出yes,否則輸出no。題解考場上第一眼就覺得是樹剖,畢竟前段時間天天見到這種型別的東西。做法有點差分的意思,在每條邊的兩個頂點異或上某個值,然後查詢這條邊上的異或和,如果合法異或和當然為0。但...
LCA 樹鏈剖分 樹上相交路徑
首先不難發現乙個結論 因此我們可以將lca排序,每一次統計路徑上有多少lca加入即可。統計完以後,把當前路徑的lca也加入。include using namespace std const int n 2e5 int n,m,cnt 0 int l n r n fa n int size n de...
數鏈剖分(樹的統計Count )
具體思路 單點更新,區間查詢,查詢的時候有兩種操作,查詢區間最大值和區間和。注意點 在查詢的時候,我們應該直接將這個點進行查詢,而不是荊這個點在樹上的編號進行查詢,只有在進入線段樹的時候我們才用樹上的編號,update的時候也就直接用樹上的編號就可以了,注意這個題有點權值會有負值的情況。ac 1 i...