#include <bits/stdc++.h>
using namespace std;
const int MAX_V = 30010;
int child[MAX_V];
int under[MAX_V];
int cnt[MAX_V];
void init()
{
for (int i = 0; i < MAX_V; i++)
child[i] = i, under[i] = 0, cnt[i] = 1;
}
int find(int x)
{
int temp;
if (x != child[x])
{
temp = find(child[x]);
under[x] += under[child[x]];
child[x] = temp;
}
return child[x];
}
void unite(int x, int y)
{
x = find(x);
y = find(y);
under[x] = cnt[y];
cnt[y] += cnt[x] ;
child[x] = y;
}
int main(int argc, char const *argv[])
{
int n, a, b;
char cater;
cin >> n;
init();
while (n--)
{
cin >> cater;
if (cater == 'M')
{
cin >> a >> b;
unite(a, b);
}
else
{
cin >> a;
find(a);
cout << under[a] << endl;
}
}
return 0;
}
HDU-2808
最新推荐文章于 2022-10-16 05:03:13 发布