注意别把数组开小了!
1 #include <cstdio> 2 #include <iostream> 3 using namespace std; 4 const int maxn=1000000+10; 5 int fa[maxn],t[maxn],m,n,k,ans; 6 int find(int a){return fa[a]==a?a:fa[a]=find(fa[a]);} 7 int main(){ 8 cin>>m>>n>>k; 9 for(int i=1;i<=m*n;i++)fa[i]=i; 10 while(k--){ 11 int a,b;cin>>a>>b; 12 int fda=find(a),fdb=find(b); 13 if(fda!=fdb)fa[fda]=fdb; 14 } 15 for(int i=1;i<=m*n;i++)t[find(i)]++; 16 for(int i=1;i<=m*n;i++)if(t[i])ans++; 17 cout<<ans<<endl; 18 return 0; 19 }