10分求调
查看原帖
10分求调
906903
dugeng0120楼主2024/4/20 12:44
#include<iostream>
using namespace std;
int f[1001],a[1001][1001];
int find(int k){
	if(f[k]==0) return k;
	f[k]=find(f[k]);
	return f[k];
}
void Union(int x,int y){
	int fx = find(x),fy = find(y);
	if(fx!=fy) f[fx]=fy;
}
int n,m,s=0,x,y,p;
int main(){
	cin>>n>>m;
	for (int i=1;i<=m;i++){
		cin>>p>>x>>y;
		if (p==0) Union(x,y);
		else{
			a[x][y]=a[y][x]=1;
			for(int j=1;j<=n;j++) {
				if(a[x][j]==1) Union(y,j); }
			for(int j=1;j<=n;j++) {
				if(a[y][j]==1) Union(x,j); }
		}
	}
	for(int i=1;i<=n;i++) if(f[i]==0) s++;
	cout<<s;
	return 0;
}
2024/4/20 12:44
加载中...