样例过了,为啥0分啊
查看原帖
样例过了,为啥0分啊
891554
small_monkey楼主2024/3/14 20:18
#include<bits/stdc++.h>
using namespace std;
#define int long long

int sz[1000005];
bool vis[1000005];
int fin(int n){
	while(n!=sz[n]){
		n = sz[n];
	}
	return n;
}
int ans[10050];
void unio(int a,int b){
	if(!vis[a] && !vis[b]){
		sz[min(a,b)] = max(a,b);
		vis[a] = true;
		vis[b] = true;
	}
	else
	if(vis[a]){
		sz[b] = fin(a);
		vis[b] = true;
	}
	else
	if(vis[b]){
		sz[a] = fin(b);
		vis[a] = true;
	}
	else
	if(vis[a] && vis[b]){
		sz[min(fin(a),fin(b))] = max(fin(a),fin(b));
	}
}

signed main(){

	int n=0,m=0;
	cin>>n>>m;
	int t = 0;
	cin>>t;
	for(int i = 1;i<= n*m;i++){
		sz[i] = i;
	}
	while(t--){
		int l,r;
		cin>>l>>r;
		unio(l,r);
	}
	int an = 0;

	for(int i= 0;i<=n*m;i++){
		if(ans[i])
		an++;
	}
	cout<<an;
	return 0;
}


2024/3/14 20:18
加载中...