题目
代码:
#include <bits/stdc++.h>
using namespace std;
int father[100020],fa[100020];
int find(int x)
{
while(x!=father[x])x=father[x];
return x;
}
void family(int x,int y)
{
x=find(x);
y=find(y);
if(x!=y)
{
father[y]=x;
fa[x]+=fa[y];
}
}
int main() {
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
father[i]=i;
fa[i]=1;
}
for(int i=1;i<=m;i++)
{
char c;
cin>>c;
if(c=='M')
{
int a,b;
scanf("%d%d",&a,&b);
family(a,b);
}
if(c=='Q')
{
int a;
scanf("%d",&a);
printf("%d\n",fa[find(a)]);
}
}
}
错的30分是超时,find函数用递归版反而只得60分,要怎么改啊QAQ