グループにメッセージを転送する通信ソフトウェアでは、ほとんどそこに広がるのメッセージを作ることができます。既知の内部の人々のこれらのグループのそれぞれが、再びメッセージは、私はすべてのグループのすべての人を求めることができるが、一度に転送され、彼のグループの全てに再び転送され、m個のグループ、そのうちの一つ、彼が置かれているのグループに送信されたメッセージがあると仮定最後の数の人々が(メッセージ人を含む)メッセージを受信した後?メッセージの出力数は(10進整数出力に改行を追加しません)受信
説明を入力します。
最初のメッセージ名を送信
のグループ数m
グループ1人のメンバー名リスト
グループ名のリストの2人のメンバー
....
Mグループのメンバー名のリスト
英語名は、文字とスペースを含む文字列、文字数は100文字以内の最大の長さです。
Mは最大値が100を超えない、グループの進数の整数です。
グループのメンバーリストには、二つの名前の間にコンマで区切って、最大1個人名の名前が含まれています。
出力説明:
出力の最後の10進数は、メッセージを受け取ることができます。
例:
入力:
ジャック
3
ジャック、トム、アニー、ルーシー・
トム、ダニー
、ジャック、リリー出力:
6
アイデア:
所有者名は、その後横断するBFSに従う統計最初のグループ番号(グループにのみジャックに注意したが、他のグループの場合には含まれていない、この時間は出力1であるべきです)
1の#include <iostreamの> 2の#include <ベクトル> 3の#include <ビット/ STDC ++ H> 4 使って 名前空間STD。 5 6ベクター< ストリング >プロ(ストリング&STR){ 7 ベクター< ストリング > RES。 8 int型のインデックス= 0 。 9 のために(int型 iは= 0 ; iはstr.sizeを()<; iは++ ){ 10 であれば(STR [I] == ' ' ){ 11 res.push_back(str.substr(インデックス、I- インデックス))。 12 インデックス= iが+ 1 ; 13 } 14 } 15 であれば(インデックス< str.size()){ 16 res.push_back(str.substr(インデックス))。 17 } 18の リターンRES。 19 } 20 21 INT メイン(){ 22 列名; 23 一方(CIN >> 名){ 24 INT M。 25 CIN >> M。 26 27 文字列CUR; 28 ベクトル<ベクトル< ストリング >> データ。 29 のためには、(int型 = Iを0 ; iがmを<; iは++ ){ 30 CIN >> CURと、 31 data.push_back(PRO(CUR))。 32 } 33 34 地図< 文字列、ベクトル< INT >> 存在します。 35 36 のために(int型 i = 0 ; iは++; iはdata.size()< ){ 37 のための(int型 J = 0 ; J <データを[I] .size(); J ++){ 38 [データ[I] [J] .push_back(I)に存在し、 39 } 40 } 41 42 キュー< INT > TEMP。 43 のためには、(int型 i = 0 ; iは、[名前] .size()が存在する<; iは++ ){ 44 temp.pushは([名前]が存在し、[I])。 45 } 46 47 ベクターは< INT >訪問(M、0 ); 48 セット < 文字列 > のres; 49 res.insert(名); 50 51 ながら(!temp.empty()){ 52 INT CUR = temp.front()。 53 temp.pop()。 54 [CUR] =訪問1 。 55 のためには、(int型 i = 0 ; iが<データ[CUR] .size(); iは++ ){ 56 のための(int型 J = 0 ; J <存在する[データ[CUR] [I] .size(); J ++ ){ 57が あれば(!訪問[存在する[データ[CUR] [I]、[J]]){ 58 temp.push(存在する[データ[CUR] [I]、[J])。 59 } 60 } 61 res.insert(データ[CUR] [I])。 62 } 63 } 64 COUT << res.size()。 65 } 66 }