题目链接:https://www.lanqiao.cn/problems/110/learning/

蓝桥杯2017国赛题,并查集的模板题,建议考前热热手

上代码


#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll m,n,k;
struct guanxi{
	int u;
	int v;
};
guanxi mapt[100010];
ll zufu[1000010];
ll root(ll x)
{
	while(x!=zufu[x])
		x=zufu[x];
	return x;
}
void kruskal()
{
	ll i;
	for(i=1;i<=m*n;i++)
		zufu[i]=i;
	for(i=1;i<=k;i++)
	{
		int x=root(mapt[i].u);
		int y=root(mapt[i].v);
		if(x!=y)
		{
			zufu[y]=x;
		}
	}
	ll cnt=0;
	for(i=1;i<=m*n;i++)
		if(zufu[i]==i) 
			cnt++;
	cout<<cnt;
}
int main()
{
	ll a,b;
	cin>>m>>n>>k;
	for(ll i=1;i<=k;i++)
	{
		cin>>a>>b;
		mapt[i].u=a;
		mapt[i].v=b;
	}
	kruskal();
 }