社区讨论
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 条回复,欢迎继续交流。
正在加载回复...