Virtual Friends

#include <iostream>
#include
<string>
#include
<set>
#include
<map>
using namespace std;

int p[200010];
int num[200010];
void make_set()
{
for(int i = 0; i < 200010; ++i)
{
p[i]
= i;
num[i]
= 1;
}
}
int find_set(int x)
{
if(x != p[x])
p[x]
= find_set(p[x]);
return p[x];
}
void union_set(int x, int y)
{
x
= find_set(x);
y
= find_set(y);
if(x != y)
{
p[y]
= x;
num[x]
+= num[y];
}
}

map
<string, int> Map;
map
<string, int>::iterator ite;
int main()
{
int cas, n, count, a, b;
string s1, s2;
while(scanf("%d", &cas) != EOF)
{
while(cas--)
{
make_set();
Map.clear();
count
= 0;
scanf(
"%d", &n);
while(n--)
{
cin
>> s1 >> s2;
ite
= Map.find(s1);
if(ite == Map.end())
{
Map.insert(make_pair(s1, count));
a
= count;
count
++;
}
else
{
a
= ite->second;
}
ite
= Map.find(s2);
if(ite == Map.end())
{
Map.insert(make_pair(s2, count));
b
= count;
count
++;
}
else
{
b
= ite->second;
}
a
= find_set(a);
b
= find_set(b);
union_set(a, b);
printf(
"%d\n", num[a]);
}
}
}
return 0;
}

  

泪流满面,WA了N次,和网上代码比较后发现车不多啊,就是一个是scanf,一个是while(scanf() != EOF), 经历了忘记假 != EOF得到output limited之后修改之后终于AC了。。。
我锲而不舍的精神终于把老天都感动了。。。
posted @ 2011-07-17 23:48  georgechen_ena  阅读(120)  评论(0)    收藏  举报