description
input
output
sample input
sample output
hint
線段樹+並查集,暴力記錄和更新一些資訊,詳情見**註解。
#include
#include
#include
#include
#include
#define inf 0x7f7f7f7f
using
namespace
std;
typedef
long
long ll;
typedef
unsigned
int ui;
typedef
unsigned
long
long ull;
inline
int read()
inline
void print(int x)
const
int n=2e2;
intmap[n+10][n+10];
int id[n*4+10],fa[n*4+10];
int n,m;
int find(int x)
struct segment
void init(int x)
t=b+w;
}}tree[n*4+10];
friend ac operator +(const ac &x,const ac &y)
}int rank=0;
for (int i=1;i<=n;i++)
z.t=rank;
return z;
}void build(int p,int l,int r)
int mid=(l+r)>>1;
build(ls,l,mid),build(rs,mid+1,r);
tree[p]=tree[ls]+tree[rs];
}void change(int p,int l,int r,int x)
int mid=(l+r)>>1;
if (x<=mid) change(ls,l,mid,x);
if (x>mid) change(rs,mid+1,r,x);
tree[p]=tree[ls]+tree[rs];
}void work()
}t;int main()
WC 2005 dface 雙面棋盤
其實就是個線段樹 並查集維護,原來的每行看做線段樹的乙個底層節點,線段樹每個節點2 n的空間建立乙個並查集,兩個節點合併時維護塊的個數資訊,然後捨棄中間部分保留外圍部分重建並查集就可以了。我寫的是zkw線段樹,用這方法就算不是黑白雙色也可以的吧。本人弱菜。include include includ...
P4121 WC2005 雙面棋盤
p4121 wc2005 雙面棋盤 貌似是劉汝佳出的題目?線段樹維護並查集 線段樹分治 1 n 行,我們要考慮維護的肯定是黑 白各自的聯通塊數量 考慮區間合併,其實就與中間這兩層有關,n 200 並查集暴力做一下就好了 include include include include includeu...
WC2005 雙面棋盤 並查集 分治
題目描述 題解 唉,還是碼力不行,寫了乙個多小時發現想錯了又重構了乙個多小時。這道題意圖很顯然,動態維護聯通塊,有乙個經典做法就是用lct維護按照刪除時間維護的最大生成樹。網上還有一種神奇的做法,線段樹套並查集,蒟蒻表示不懂。這道題可以利用並查集操作可以撤銷這種性質來做。線段樹分治 線段樹分治可以分...