10pts 求调教
  • 板块P1682 过家家
  • 楼主_7Mr
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/10/18 09:08
  • 上次更新2023/11/2 13:07:55
查看原帖
10pts 求调教
602632
_7Mr楼主2023/10/18 09:08
#include<bits/stdc++.h>
#define int long long
#define double long double
#define INF INT_MAX
using namespace std;
const int maxn=2e5+5,maxnn=5e3+5;
int n,m,q,k;
int f[maxn],sum[maxn],flag[maxnn][maxnn];
int find(int x) {
	if(f[x]==x) return x;
	else return f[x]=find(f[x]);
}
struct node {
	int man,woman;
	#define a1(i) a[i].man
	#define a2(i) a[i].woman
	#define b1(i) b[i].man
	#define b2(i) b[i].woman
} a[maxn],b[maxn];
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin>>n>>m>>k>>q;
	for(int i=1; i<=n; i++) f[i]=i;
	for(int i=1; i<=m; i++) cin>>a1(i)>>a2(i);
	for(int i=1; i<=q; i++) {
		cin>>b1(i)>>b2(i);
		f[find(b1(i))]=find(b2(i));
	}
	for(int i=1; i<=m; i++) {
		if(!flag[find(a1(i))][find(a2(i))]) {
			sum[find(a1(i))]++;
			flag[find(a1(i))][find(a2(i))]=1;
		}
	}
	int ans=-INF;
	for(int i=1;i<=n;i++) ans=max(ans,sum[i]);
	cout<<min(ans+k,n)<<endl;
	return 0;
}

2023/10/18 09:08
加载中...