社区讨论

54pts求调

P2170选学霸参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo2jws48
此快照首次捕获于
2023/10/23 15:03
2 年前
此快照最后确认于
2023/10/23 15:03
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pll;
const int N = 2e4 + 10;
int n, m, k;
int f[N];
bool st[N];
struct node{
	int id , val;
	bool operator<(const node &w) const
	{
		return val < w.val;
	}
}Size[N];
int find(int x) {
	if (x == f[x]) return x;
	return f[x] = find(f[x]);
}
int main() {
	cin >> n >> m >> k;
	for (int i = 1 ; i <= n ; ++i) f[i] = i, Size[i].id = i , Size[i].val = 1;
	while (k--) {
		int a, b;
		cin >> a >> b;
		int fa = find(a), fb = find(b);
		if (fa != fb) {
			f[find(a)] = find(b);
			Size[b].val += Size[a].val;
		}
	}
	sort(Size + 1 , Size + n + 1);
	int ans = 0;
	for(int i = n ; i >= 1 ; --i)
	{
		if(f[Size[i].id] == Size[i].id && !st[Size[i].id])
		{
			st[Size[i].id] = 1;
			if(ans + Size[i].val <= m)
			{
				ans += Size[i].val;
			}	
		}			
	}
	cout << ans << endl;
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...