題目鏈結
思路:
首先,對於每個員工之間的合併,可以採用並查集來解決這件事.那麼主要的問題就是如何求這個集合中第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...