1 条题解

  • 0
    @ 2024-2-20 20:28:30

    简单求解集合数即可

    #include <bits/stdc++.h>
    using namespace std;
    int n,m,q,fa[5010];
    int find(int x){
    	if (x!=fa[x])fa[x]=find(fa[x]);
    	return fa[x];
    }
    void merge(int x,int y){
    	int tx=find(x);
    	int ty=find(y);
    	if (tx!=ty)fa[tx]=ty;
    }
    int main(){
    	while (true){
    		cin>>n;
    		if (n==0)break;
    		cin>>m;
    		for (int i=1;i<=n;i++)fa[i]=i;
    		int x,y;
    		for (int i=1;i<=m;i++){
    			cin>>x>>y;
    			merge(x,y);
    		}
    		int c=0;
    		for (int i=1;i<=n;i++){
    			if (fa[i]==i)c++;
    		}
    		cout<<c-1<<endl;//要-1
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    918
    时间
    1000ms
    内存
    128MiB
    难度
    4
    标签
    递交数
    23
    已通过
    17
    上传者