30分求调
  • 板块P2078 朋友
  • 楼主SHC_CENSORED
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/8 19:16
  • 上次更新2024/3/8 21:33:06
查看原帖
30分求调
947863
SHC_CENSORED楼主2024/3/8 19:16
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl "\n"
const int N=1e4+100;
int a[N],d[N],n,m,p,q;
int b,c,x,y,sum,mus;
int fun(int gen){
	if(a[gen]==gen)return gen;
	else return a[gen]=fun(a[gen]);
}
int fun1(int gen){
	if(d[gen]==gen)return gen;
	else return d[gen]=fun(d[gen]);
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>m>>p>>q;
	for(int i=1;i<=n;i++){a[i]=i;}
	for(int i=1;i<=m;i++){d[i]=i;}
	for(int i=1;i<=p;i++){
		cin>>b>>c;
		int b1=fun(b),c1=fun(c);
		if(c==1&&b!=1){swap(b1,c1);}
		if(b1!=c1){a[c1]=b1;}
	}
	for(int i=1;i<=n;i++){
		if(a[i]==a[1]){sum++;}
	}
	for(int i=1;i<=q;i++){
		cin>>x>>y;x=x*-1,y=y*-1;
		int x1=fun1(x),y1=fun1(y);
		if(y==1&&x!=1){swap(x1,y1);}
		if(x1!=y1){d[y1]=x1;}
	}
	for(int i=1;i<=m;i++){
		if(d[i]==d[1]){
			mus++;
		}
	}
	cout<<min(sum,mus);
	return 0;
}
2024/3/8 19:16
加载中...