#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
string s;
map<string,int> too;
map<int,string> findd;
int cnt;
bool flag[maxn];
vector<int> edge[maxn];
vector<int> res[maxn];
int main()
{
int t,n,i,j;
scanf("%d",&t);
cnt=t;
for(i=1;i<=t;i++)
{
cin>>s;
too[s]=i;
findd[i]=s;
scanf("%d",&n);
while(n--)
{
cin>>s;
if(!too[s])
{
too[s]=++cnt;
findd[cnt]=s;
}
edge[i].push_back(too[s]);
edge[too[s]].push_back(i);
}
}
cnt=0;
for(i=1;i<=t;i++)
{
if(flag[i])
continue;
queue<int> que;
res[++cnt].push_back(i);
que.push(i);
flag[i]=true;
while(que.size())
{
int now=que.front();
que.pop();
for(vector<int>::iterator it=edge[now].begin();it!=edge[now].end();it++)
{
if(flag[*it])
continue;
que.push(*it);
if(*it<=t)
res[cnt].push_back(*it);
flag[*it]=true;
}
}
sort(res[cnt].begin(),res[cnt].end());
}
for(i=1;i<=cnt;i++)
{
cout<<findd[*(res[i].begin())];
for(vector<int>::iterator it=res[i].begin()+1;it!=res[i].end();it++)
cout<<' '<<findd[*it];
cout<<endl;
}
return 0;
}
hiho 1335 Email Merge
最新推荐文章于 2019-06-03 17:20:07 发布