P5631 最小mex生成樹 線段樹,並查集

2022-03-29 05:37:24 字數 927 閱讀 9634

\(n\)個點\(m\)條邊的一張圖,求\(mex\)值最小的一棵生成樹。

考慮比較暴力的做法,列舉答案,然後判斷其他邊能否構成一棵生成樹。

發現一條邊會被重複加入多次,可以考慮不刪除其他不動的邊。

時間複雜度\(o(n\log n\log w)\)

#include#include#include#include#includeusing namespace std;

const int n=1e6+10,l=1e5+2;

struct linecl[n];

int n,m,cnt,fa[n],siz[n];

vectorv[n<<1];

int read()

while(isdigit(c))

return x*f;

}int find(int x)

void unionm(int x,int y)

return;

}void change(int x,int l,int r,int l,int r,line w)

int mid=(l+r)>>1;

if(r<=mid)change(x*2,l,mid,l,r,w);

else if(l>mid)change(x*2+1,mid+1,r,l,r,w);

else change(x*2,l,mid,l,mid,w),change(x*2+1,mid+1,r,mid+1,r,w);

return;

}int solve(int x,int l,int r)

int main()

); if(w!=l)change(1,1,l,w+1,l,(line));

}printf("%d\n",solve(1,1,l)-1);

return 0;

}

P5631 最小mex生成樹 線段樹,並查集

n nn個點m mm條邊的一張圖,求mex mexme x值最小的一棵生成樹。考慮比較暴力的做法,列舉答案,然後判斷其他邊能否構成一棵生成樹。發現一條邊會被重複加入多次,可以考慮不刪除其他不動的邊。ww的邊,每次把w ww丟到 1,w 1 w 1,1,w 1 cup w 1,infty 1,w 1 ...

洛谷P5631 最小mex生成樹

給定 n 個點 m 條邊的無向連通圖,邊有邊權。設乙個自然數集合 s 的 text 為 最小的 沒有出現在 s 中的自然數。現在你要求出乙個這個圖的生成樹,使得其邊權集合的 text 盡可能小。n leq 10 6,m leq 2 times 10 6,w i leq 10 5 很套路的線段樹分治。...

並查集 最小(最大)生成樹

首先給出並查集基本 int fa maxn rank maxn 基礎陣列,fa陣列儲存上乙個節點,rank表示節點級數 比較少用 初始化 void init int n 查詢 int find int x void combine int a,int b 判斷 bool issame int a,i...