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了。。。
我锲而不舍的精神终于把老天都感动了。。。

浙公网安备 33010602011771号