打擊犯罪 SSL 2342 並查集

2021-10-08 08:45:55 字數 1597 閱讀 1599

time limit:10000ms memory limit:65536k

total submit:36 accepted:23

case time limit:1000ms

description

某個地區有n(n

<

=1000

)n(n<=1000)

n(n<=1

000)

個犯罪團夥,當地**按照他們的危險程度由高到低給他們編號為1−n

1-n1−

n,他們有些團夥之間有直接聯絡,但是任意兩個團夥都可以通過直接或間接的方式聯絡,這樣這裡就形成了乙個龐大的犯罪集團,犯罪集團的危險程度唯一由集團內的犯罪團夥數量確定,而與單個犯罪團夥的危險程度無關(該犯罪集團的危險程度為n

nn)。現在當地**希望花盡量少的時間(即打擊掉盡量少的團夥),使得龐大的犯罪集團分離成若干個較小的集團,並且他們中最大的乙個的危險程度不超過n/2

n/2n/

2。為達到最好的效果,他們將按順序打擊掉編號1

11到k

kk的犯罪團夥,請程式設計求出k

kk的最小值。

input

第一行乙個正整數n

nn接下來的n

nn行每行有若干個正整數,第乙個整數表示該行除第乙個外還有多少個整數,若第i行存在正整數k

kk,表示i,k

i,ki,

k兩個團夥可以直接聯絡

output

乙個正整數,為k的最小值

sample input

72 2 5

3 1 3 4

2 2 4

2 2 3

3 1 6 7

2 5 7

2 5 6

sample output

1解題思路

如果正向建立並查集,正向刪除,那麼每一次都需要維護重置並查集。所以我們可以倒過來思考,從n

nn到1

11列舉,每次把i

ii點加入圖中,也就是刪除1~k-1條邊,剩餘k

nk~n

kn,若最大集合點數不超過n/2

n/2n/

2,說明這種方案可行,且k還能小,一旦不滿足,意味這k不能加入圖中,即k

kk即為最小刪除邊。

**

#include

#include

#include

#include

using namespace std;

int n,m,a[

1010][

1010

],fa[

1010

],c[

1010];

int find

(int x)

int main()

for(int i=

1;i<=n;i++

)for

(int i=n;i>

0;i--)}

}}}}

並查集 打擊犯罪(ssl 2342)

有n個人某些人之間有連線 連線成乙個團夥 現在要最大的團夥人數不大於n 2,要最少要刪掉幾個人 要按順序刪 某個地區有n n 1000 個犯罪團夥,當地 按照他們的危險程度由高到低給他們編號為1 n,他們有些團夥之間有直接聯絡,但是任意兩個團夥都可以通過直接或間接的方式聯絡,這樣這裡就形成了乙個龐大...

打擊犯罪 並查集

有n個人,相互之間有一些關係,從而形成乙個圖,現在要從1 n1 n 1 n 按順序去掉k個人 即去掉1 k1 k 1 k 使最大的子圖的點數 22,求k的最小值 某個地區有n n 1000 個犯罪團夥,當地 按照他們的危險程度由高到低給他們編號為1 n,他們有些團夥之間有直接聯絡,但是任意兩個團夥都...

並查集 打擊犯罪

description 某個地區有n n 1000 個犯罪團夥,當地 按照他們的危險程度由高到低給他們編號為1 n,他們有些團夥之間有直接聯絡,但是任意兩個團夥都可以通過直接或間接的方式聯絡,這樣這裡就形成了乙個龐大的犯罪集團,犯罪集團的危險程度唯一由集團內的犯罪團夥數量確定,而與單個犯罪團夥的危險...