効果の対象とは:同じニックネームは、同じ人ではないかもしれないが、それは同じ人かもしれないが、別のニックネームは確かにイタリアがリンクされ、同じ個人のメールアドレスに従うことと同じ人物ではありません。
互いに素セット:
対応する互いに素-集合演算のE-mailアドレス、電子メールアドレス交差点が存在している場合には、二つのリストは、それらを一緒に接続するには、確かに同じ人に起因するものです。
1 クラスソリューション{ 2 公共: 3 int型の検索(INT IDR、ベクトル< INT >&U){ 4 ながら(!IDR = U [IDR])IDR = U [IDR]。 5 リターンIDR。 6 } 7 ボイド(参加INT IDR1、INT IDR2、ベクトル< INT >&U){ 8 INT F1 = (IDR1、U)を見つけます 9 INT F2 = (IDR2、U)を見つけます。 10 U [F2] = F1。 11 } 12 マップ< 文字列、int型 > hashmap1。 13 地図< INT、ベクトル<ベクトル< ストリング >>> hashmap2。 14 ベクトル<ベクトル< 文字列 >> RES。// 返回向量 15 ベクトル<ベクトル< ストリング >> accountsMerge(ベクトル<ベクトル< ストリング >>&アカウント){ 16 ベクター< 整数 > U(accounts.size())。 17 のために(INT iが= 0 ; I <u.sizeは(); iが++)U [I] = I。 用(int型 K = 0 ; K <accounts.size(); K ++){ // 論理接続を見つける 19。 ための(INT I = 1 ; I <アカウント[K] .size(); I ++ ){ 20が 自動ADDR =をアカウント[K] [I]; 21である 自動ITER = hashmap1.find(ADDR)、 22は IF(ITERのhashmap1.end ==())hashmap1 [ADDR] = K; 23である 他(hashmap1 [ADDR]、Kに参加し、U ); 24 } 25 } 26は、 27 // プリント互いに素なセットケース 28 @以下のために(INT I 0 =; I <u.size(); I ++){ 29 // COUT << U [I] << "「。 30 // 用(自動ヴァル:アカウント[i])とはcout <<ヴァル<< "「; 31 // coutの<<てendl; 32 // } 33 34 のために(INT iは= 0 ; I <accounts.size(); I ++){ // 物理连接 35 のint F =(U [i]は、U)を求めます。// 对顶层节点进行分类 36 自動ITER = hashmap2.find(F)。 37 であれば(ITER == hashmap2。 {}; 39 } 40 hashmap2 .push_back [F](アカウント[I])。 41 } 42 のための(自動ITER = hashmap2.begin();!ITER = hashmap2.end(); ITER ++ ){ 43 セット < ストリング > マップ。 44 のための(自動リスト:iter-は> 秒){ 45 のために(INT iが= 1 ; I <はlist.size(); I ++ ){ 46 列ヴァル= リスト[i]は、 47 自動ITR = map.find(ヴァル)。 48 もし ITR(==map.end())map.insert(ヴァル) 49 } 50 } 51 場合(map.empty())続けます。 52 ベクター< ストリング > TEMP(map.begin()、map.end())。 53 ソート(temp.begin()、temp.end())。 54 temp.insert(temp.begin()、アカウント[iter->最初] [ 0 ])。 55 res.push_back(TEMP)。 56 } 57 リターンRES。 58 } 59 }。