向前合併並查集,其實是路徑壓縮。
因為每乙個點對應的字母是確定的所以,我們把每一次看成線段,更新線段沒有覆蓋到的。用並查集把線段連續的合併在一起。
注意這裡每一次向前查詢,當前點的父親節點應該指向像一條線段的父親。
#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個矩形,給定每個矩形的左下角座標和右上角座標。如果把重合的矩形合併成...