死循环,不知道哪写错了
#include<bits/stdc++.h>
using namespace std;
struct ee{
int to;
int next;
}edge[5005];
int h[1005],fa[1005],etot,size[1005],is_fa[1005],sum;
void add_edge(int u,int v){
edge[etot]=(ee){v,h[u]};
h[u]=etot++;
}
int find(int a){
if(fa[a]==a) return a;
else return fa[a]=find(fa[a]);
}
void unin(int x,int y){
x=find(x),y=find(y);
if(x==y) return;
if(size[x]>size[y]) swap(x,y);
if(size[x]==size[y]) size[y]++;
fa[x]=y;
return;
}
int main(){
int n,m;
scanf("%d",&n);
scanf("%d",&m);
for(int i=1;i<=n;i++){
size[i]=1;
fa[i]=i;
h[i]=-1;
}
for(int i=1;i<=m;i++){
char c;
int p,q;
scanf("%c %d %d\n",&c,&p,&q);
if(c=='F') unin(p,q);
else add_edge(p,q),add_edge(q,p);
}
for(int i=1;i<=n;i++){
int l=h[i];
for(int j=edge[l].next;j!=-1;j=edge[j].next)
unin(edge[l].to,edge[j].to);
}
for(int i=1;i<=n;i++) is_fa[find(i)]=1;
for(int i=1;i<=n;i++) if(is_fa[i]) ++sum;
printf("%d",sum);
return 0;
}