点击打开链接
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<string>
#include<map>
using namespace std;
#define maxn 100005
int f[maxn],sum[maxn];
int cnt;
map<string,int>m;
int find(int x)
{
if(x!=f[x])
f[x]=find(f[x]);
return f[x];
}
void UN(int a,int b)
{
a=find(a);b=find(b);
if(a!=b)
{
f[a]=b;
sum[b]+=sum[a];
}
printf("%d\n",sum[b]);
}
int main()
{
int t,n,i;
char a[25],b[25];
while(scanf("%d",&t)!=-1)//妈蛋,输入几组数据也是多实例
{
while(t--)
{
scanf("%d",&n);
m.clear();cnt=1;
for(i=1;i<=n;i++)
{
scanf("%s%s",a,b);
if(m.find(a)==m.end())
{
f[cnt]=cnt;
sum[cnt]=1;
m[a]=cnt++;
}
// printf("%d ",m[a]);
if(m.find(b)==m.end())
{
f[cnt]=cnt;
sum[cnt]=1;
m[b]=cnt++;
}
// printf("%d\n",m[b]);
UN(m[a],m[b]);
}
}
}
return 0;
}