该题一眼并查集,直接套并查集模板即可
#include<iostream> #include<set> #define MAX 1010 using namespace std; int m,n,k,a,b,len; int parent[MAX*MAX]; int find(int v){ if(parent[v]!=v){ parent[v]=find(parent[v]); } return parent[v]; } int main(){ cin>>m>>n; len=m*n; for(int i=1;i<=len;i++){ parent[i]=i; } cin>>k; while(k--){ cin>>a>>b; if(find(a)!=find(b)){ parent[find(a)]=find(b); } } set<int>st; for(int i=1;i<=len;i++){ find(i);//注意最后需要捋一下 st.insert(parent[i]); } cout<<st.size()<<endl; return 0; }