Wc Dface雙面棋盤

2021-08-14 08:30:54 字數 1307 閱讀 7642

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維護按照刪除時間維護的最大生成樹。網上還有一種神奇的做法,線段樹套並查集,蒟蒻表示不懂。這道題可以利用並查集操作可以撤銷這種性質來做。線段樹分治 線段樹分治可以分...