2733 HNOI2012 永無鄉 線段樹合併

2022-06-13 20:12:09 字數 1074 閱讀 8928

題目:

題解:

建n棵動態開點的權值線段樹,然後邊用並查集維護連通性,邊合併線段樹維護第k重要。

其實實現還是很簡單的。。

**:

1 #include2

3using

namespace

std;45

const

int maxn=300010;6

intfa[maxn],root[maxn],n,m,g[maxn],f[maxn],id;

7char ch[3];8

9struct

trtree[maxn<<3

];13

14void update(int

now)

1718

int merge(int now,int

last)

2627

int ffa(int

x)30

31void connect(int u,int

v)35

36void build(int &now,int w,int lt,int

rt)40

int mid=lt+rt>>1;41

if(w<=mid) build(tree[now].ch[0

],w,lt,mid);

42else build(tree[now].ch[1],w,mid+1

,rt);

43update(now);44}

4546

int ask(int now,int

k)51

52int

main() int

u,v,x,y,tt;

60for(int i=1;i<=m;i++) scanf("

%d%d

",&u,&v),connect(u,v);

61 scanf("

%d",&m);

62for(int i=1;i<=m;i++)

68return0;

69 }

HNOI2012 永無鄉 題解

對於每乙個點先建立乙個權值線段樹,之後並查集維護 更改連通性。不知道權值線段樹是啥的戳我 聯通就直接把祖先連起來然後合併線段樹 include include using namespace std const int n 100005 int size n 20 n,m,fa n type,q,r...

HNOI2012 永無鄉 splay合併

題目描述 永無鄉包含 n 座島,編號從 1 到 n 每座島都有自己的獨一無二的重要度,按照重要度可以將這 n 座島排名,名次用 1 到 n 來表示。某些島之間由巨大的橋連線,通過橋可以從乙個島到達另乙個島。如果從島 a 出發經過若干座 含 0 座 橋可以 到達島 b 則稱島 a 和島 b 是連通的。...

luogu解題報告 HNOI2012永無鄉

啟發式合併 平衡樹 並查集 複雜度o n lg2n 還是可以過的.splay一次寫過然而後面各種跪.除錯能力捉急 估計是wc2017課前助眠 聽太多了 include using namespace std const int n 100005 struct node tree n 30 int t...