# include <stdio.h>
# include <string>//不能sting.h
# include <algorithm>
# include <map>
# include<iostream>
using namespace std;
int father[200010];
int num[200010];
int find(int x)
{
if(x==father[x])
return x;
return father[x]=find(father[x]);
}
void merge(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx!=fy)
{
father[fx]=fy;//fy为父亲结点
num[fy]+=num[fx];
printf("%d\n",num[fy]);//输出父亲节点的num 即sumnum
}
else
printf("%d\n",num[fx]);
}
int main()
{
map<string,int>m;
int t,n,i,ans;
char a[30],b[30];
while(~scanf("%d",&t))
{
while(t--)
{
for(i=1;i<=200010;i++)//i并不是小于n 初始化到最大值
{
father[i]=i;
num[i]=1;
}
scanf("%d",&n);
m.clear();
ans=1;
for(i=0;i<n;i++)
{
scanf("%s %s",a,b);
if(!m[a])//map啊~~~
{
m[a]=ans++;//没有访问过的friend 依次加一,即farther就会不同
}
if(!m[b])
{
m[b]=ans++;
}
merge(m[a],m[b]);
}
}
}
return 0;
}
hdu 3172Virtual Friends (map水过)
最新推荐文章于 2019-03-07 09:22:02 发布