您的位置:首页 > 编程语言 > C语言/C++

《并查集》hdu acm 5.1.7 c++ map的使用

2015-11-15 01:20 489 查看
#include<iostream>
#include<stdio.h>
#include<map>
using namespace std;
map<string,int> m;
const int maxn=200005;
int f[maxn],num[maxn],cnt;
char name[maxn][15];
void init()
{
int i;
for(i=1;i<maxn;i++)
{
f[i]=i;
num[i]=1;
}
}
int find(int x)
{
if(f[x]!=x)
f[x]=find(f[x]);
return f[x];
}
void merge(int x,int y)
{
int fx,fy;
fx=find(x);
fy=find(y);
if(fx!=fy)
{
f[fx]=fy;
num[fy]+=num[fx];
printf("%d\n",num[fy]);
}
else
{
printf("%d\n",num[fy]);
}
}
int main()
{
int t,n;
char a[25],b[25];
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
init();
scanf("%d",&n);
m.clear();
cnt=1;
while(n--)
{
scanf("%s%s",a,b);
if(!m[a])
{
m[a]=cnt++;
}
if(!m[b])
{
m[b]=cnt++;
}
merge(m[a],m[b]);
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: