csu 1949 小明的煩惱 並查集 權值線段樹

2021-08-02 13:59:24 字數 926 閱讀 2614

題目鏈結

思路:

首先,對於每個員工之間的合併,可以採用並查集來解決這件事.那麼主要的問題就是如何求這個集合中第k大的數.

這裡採用權值線段樹來合併,大體的權值線段樹,就是我們當時用來求逆序數的用法。

題目中是2e5的資料範圍,那麼我們初始對每個員工建立乙個樹,然後記錄下他的根節點和他的左右子節點,合併時,將兩個團隊所在樹的根節點的合併就好,

#include#define inf 0x3f3f3f3f

using namespace std;

const int maxn=1e5+10;

const int maxm=1e7+10;

struct node

q[maxm];

int a[maxn],father[maxn],root[maxn],s[maxn];

int n,m;

int k;

int build(int l,int r,int d)//建樹

else

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

q[t].ls=build(l,mid,d);

q[t].rs=build(mid+1,r,d);

return t;

}} int find(int x)

int get(int roots,int ss)//找第k大的數

} if(q[x].rs==0)

q[x].rs=q[y].rs;

else }

q[x].sum+=q[y].sum;

return x;

}int main()

k=0;

for(int i=1;i<=n;i++)

while(m--)

else

}} return 0;

}

CSU 1045 並查集(帶權並查集)

大一的學一下,大二以上還不會並查集的統統去面壁。多組資料,每組第一行兩個正整數n,m,表示有1 n這n個編號,m個關係。接下來m行,每行兩個數i,j,1 i,j n,表示i和j是一組的。每個編號自己和自己是一組的。1 n 1000000 1 m 100000 每組資料輸出一行,乙個數,表示組員最多的...

反向並查集 國王的煩惱

問題描述 c國由n個小島組成,為了方便小島之間聯絡,c國在小島間建立了m座大橋,每座大橋連線兩座小島。兩個小島間可能存在多座橋連線。然而,由於海水沖刷,有一些大橋面臨著不能使用的危險。如果兩個小島間的所有大橋都不能使用,則這兩座小島就不能直接到達了。然而,只要這兩座小島的居民能通過其他的橋或者其他的...

藍橋杯 國王的煩惱(並查集)

include include include includeusing namespace std const int maxn 1e5 5 int n,m,pre maxn struct node a maxn int find int x return r bool join int x,in...