9011 打擊犯罪

2021-09-28 10:09:33 字數 1234 閱讀 3779

time limit: 1 second

memory limit: 128 mb

某個地區有n(n<=1000)個犯罪團夥,當地**按照他們的危險程度由高到低給他們編號為1~n,他們有些團夥之間有直接聯絡,但是任意兩個團夥都可以通過直接或者間接的方式聯絡,這樣這裡就形成了乙個龐大的犯罪集團,犯罪集團的危險程度唯一由集團內的犯罪團夥數量確定,而與單個犯罪團夥的危險程度無關(該犯罪團夥的危險程度為n)。現在當地**希望花盡量少的時間(即打擊掉盡量少的團夥),使得龐大的犯罪集團分離成若干個較小的集團,並且他們中最大的乙個的危險程度不超過n/2。為達到最好的效果,他們將按順序打擊掉編號1到k的犯罪團夥,請程式設計求出k的最小值。 

第一行乙個正整數n。接下來的n行每行有若干個正整數,第乙個整數表示該行除第乙個外還有多少個整數,若第i行存在正整數k,表示i、k兩個團夥可以直接聯絡。

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

7

2 2 5

3 1 3 4

2 2 4

2 2 3

3 1 6 7

2 5 7

2 5 6

1
【題解】

首先,把輸入的資料存在乙個二維陣列中a,什麼事都不用做。

然後開始處理資料。

從1開始列舉k的值。

首先k= 1

然後就按照輸入的順序處理資料,但是過濾掉小於等於1的團夥資訊,是同乙個團夥就用並查集並在一起,用乙個num[i]陣列記錄i集團的團夥人數。

檢視是否所有的num都小於n/2

然後k=2;

初始化f陣列和num陣列,按照順序處理資料,這次過濾掉小於等於2的團夥資訊。。。。。

以此類推直到找到乙個k滿足題意。然後就直接輸出這個值。

【**】

#include #include #define maxn 1010

int n,f[maxn],num[maxn],nn = 0,a[maxn][maxn];

bool bo[maxn];

int findfather(int x)//找根節點. 順便把所有的節點指向根節點。

void hebing(int x,int y) //把x和y兩個元素合併在一起。

}void input_data()

}void get_ans()

if (!ok) k++;

} printf("%d\n",k);

}int main()

SSLOJ2342 打擊犯罪

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

codevs5971 打擊犯罪

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

codevs 5971 打擊犯罪

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