題解警察抓販毒集團。有不同型別的犯罪集團,人員可能重複,集團內的人會相互接觸。現在警察在其中一人(0號)身上搜出毒品,認為與這個人直接接觸或通過其他人有間接接觸的人都是嫌疑犯。問包括0號犯人共有多少嫌疑犯?
多樣例輸入。
每個測試用例以兩個整數n和m開頭,其中n為人數,m為犯罪集團數。你可以假定0 < n <= 30000和0 <= m <= 500。在所有的情況下,每個人都有自己獨特的整數編號0到n−1, 且0號是公認的嫌疑犯。
接下來m行輸入,每個犯罪集團一行。每一行從乙個整數k開始,它本身表示集團內成員的數量。按照成員的數量,在這個組中有k個整數表示人員。一行中的所有整數都被至少乙個空格隔開。
n = 0且m = 0時輸入結束。
對於每個樣例,輸出嫌疑犯人數。
樣例輸入
100 4
2 1 2
5 10 13 11 12 14
2 0 1
2 99 2
200 2
1 55 1 2 3 4 5
1 00 0
樣例輸出41
1思路1. 首先要注意多組輸入
2. 然後我們就可以想到將有相同人的集團合成乙個更大的集團
3. 最後輸出包含0的集團
至於如何計算第二步,非常簡單
初始化根節點和人數分別為自己和1
fa[i] = i, sum[i] = 1;找到根節點不同的又在同乙個集團的人
同化根節點,嫌疑犯人數累加 **
c++
#include
#include
using
namespace std;
#define m 50005
int fa[m]
, n, m;
int sum[m]
;intc(
int x)
voidr(
)}}}
intmain()
return0;
}
the end 打擊犯罪 並查集
有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,他們有些團夥之間有直接聯絡,但是任意兩個團夥都可以通過直接或間接的方式聯絡,這樣這裡就形成了乙個龐大的犯罪集團,犯罪集團的危險程度唯一由集團內的犯罪團夥數量確定,而與單個犯罪團夥的危險...
團夥 並查集 團夥 並查集
題目描述 1920年的芝加哥,出現了一群強盜。如果兩個強盜遇上了,那麼他們要麼是朋友,要麼是敵人。而且有一點是肯定的,就是 我朋友的朋友是我的朋友 我敵人的敵人也是我的朋友。兩個強盜是同一團夥的條件是當且僅當他們是朋友。現在給你一些關於強盜們的資訊,問你最多有多少個強盜團夥。輸入輸出格式 輸入格式 ...