HHHOJ 143 並查集離線 樹鏈剖分

2021-08-19 19:36:21 字數 1611 閱讀 8733

這是一道嘿嘿嘿oj的題目,內部資料,所以沒有題面。

這道題是lct的板子題,但是蒟蒻不會lct,所以只能用它的弱化版樹剖來做了。

我們先離線讀入所有的操作,對於操作1,我們先連邊,並打標記,如果find(x)==find(y),則在後面的操作就不許要管了,直接continue。對於操作2,我們就判斷x和y是否在同乙個並查集中,如果不在就打標記,後面操作時直接輸-1。

code:

#include#define maxn 200005

#define ll long long

using namespace std;

ll read()

ll n,q,cnt,dfn,head[maxn],nxt[maxn],go[maxn],vis[maxn*3],val[maxn],rt;

ll sum[maxn*4],son[maxn],siz[maxn],dep[maxn],fa[maxn],rank[maxn],tid[maxn],top[maxn];

struct nodeq[maxn*3];

ll find(ll x)

void unionn(ll x,ll y)

void addedge(ll x,ll y)

void dfsi(ll x,ll father)

}void dfsii(ll x,ll t)

}void up(ll node)

void build(ll node,ll l,ll r)

ll mid=(l+r)>>1;

build(node<<1,l,mid);

build(node<<1|1,mid+1,r);

up(node);

}void update(ll node,ll l,ll r,ll p,ll ad)

ll mid=(l+r)>>1;

if(p<=mid) update(node<<1,l,mid,p,ad);

else update(node<<1|1,mid+1,r,p,ad);

up(node);

}ll query(ll node,ll l,ll r,ll l,ll r)

ll mid=(l+r)>>1,res=0;

if(l<=mid) res|=query(node<<1,l,mid,l,r);

if(r>mid) res|=query(node<<1|1,mid+1,r,l,r);

return res;

}ll querylink(ll u,ll v)

if(dep[u]>dep[v]) swap(u,v);

res|=query(1,1,n,tid[u],tid[v]);

while(res)

return tot;

}int main()

;if(type==1)

unionn(x,y);addedge(x,y);

}if(type==2)

}dfsi(1,0);

dfsii(1,1);

build(1,1,n);

for(ll i=1;i<=q;i++)

if(q[i].type==2)

}return

0;}

LCA Tarjin 並查集 離線

以前了解的tarjin演算法是用來求連通分量,在這裡是用來求最近公共祖先 並查集用過,很有意思的工具。kraskal演算法是並查集最經典的應用。首先初始化集合,每個元素為單個集合。集合,我們需要選出乙個代表,這個代表的性質是set u u。一開始乙個集合只有乙個元素,所以該集合的代表也就是該元素。當...

離線 並查集 Mootube

mootube 描述給定一顆n個節點的樹,定義兩點距離為他們之間路徑中邊權最小值。q次詢問k,v,詢問到v距離 k的點有多少 不含v 輸入第一行兩個整數n,q。接下來n 1行,每行3個整數u,v,w表示u,v之間有條路徑,長為w 接下來q組詢問,每組詢問2個整數k,v 輸出q行回答詢問 樣例輸入 4...

題解 history(離線並查集)

今天考試很水,ssw023道題都寫的正解,然而不注重細節。1or 1寫成 1 連通塊最大值不更新 t3就是這道細節題 description 歷史學家小 正在研究乙個奇怪的王國的歷史。當前階段的任務是研究該國的交通。根據這個奇怪的王國的史書記載,史書開始記載前這個王國有 n 個城市 城市從 0 開 ...