C++-蓝桥杯-合成植物[并查集][模板题]

注意别把数组开小了!

 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 }
原文地址:https://www.cnblogs.com/JasonCow/p/13735688.html