cf 828c向前合併並查集

2021-09-28 18:58:52 字數 1412 閱讀 8275

向前合併並查集,其實是路徑壓縮。

因為每乙個點對應的字母是確定的所以,我們把每一次看成線段,更新線段沒有覆蓋到的。用並查集把線段連續的合併在一起。

注意這裡每一次向前查詢,當前點的父親節點應該指向像一條線段的父親。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//#include

#include

#define up(i,a,b) for(int i=a;i#define dw(i,a,b) for(int i=a;i>b;i--)

#define upd(i,a,b) for(int i=a;i<=b;i++)

#define dwd(i,a,b) for(int i=a;i>=b;i--)

//#define local

typedef

long

long ll;

const

double esp =

1e-6

;const

double pi =

acos(-

1.0)

;const

int inf =

0x3f3f3f3f

;const

int inf =

1e9;

using

namespace std;

ll read()

while

(ch >=

'0'&& ch <=

'9')

return x * f;

}typedef pair<

int,

int> pir;

#define lson l,mid,root<<1

#define rson mid+1,r,root<<1|1

#define lrt root<<1

#define rrt root<<1|1

const

int n =

2e6+10;

int fa[n]

;int hi[n]

;int n;

void

build()

}int

findx

(int x)

char ans[n]

;char temp[n]

;int k;

int pos;

intmain()

}}up(i,

1, mxn)

return0;

}

cf 828c向前合併並查集

向前合併並查集,其實是路徑壓縮。因為每乙個點對應的字母是確定的所以,我們把每一次看成線段,更新線段沒有覆蓋到的。用並查集把線段連續的合併在一起。注意這裡每一次向前查詢,當前點的父親節點應該指向像一條線段的父親。include include include include include inclu...

按秩合併並查集

1.通過比較並查集的大小來連邊,將小的 u 向大的 v 連邊,這樣對於大的並查集,查詢代價不變,而小的並查集查詢代價每個點增加了1,相當於增加了siz u 反過來則變成了siz v siz u logn 因為每上一層大小減半 2.相較於路徑壓縮的並查集,他可以保留原始的資訊 例題 bzoj4668 ...

SDNU 1016 矩形合併 並查集

1016.矩形合併 time limit 1000 ms memory limit 32768 kb total submission s 242 accepted submission s 49 description 平面上有n個矩形,給定每個矩形的左下角座標和右上角座標。如果把重合的矩形合併成...