专栏文章

题解:AT_abc399_c [ABC399C] Make it Forest

AT_abc399_c题解参与者 1已保存评论 0

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@mipru1ft
此快照首次捕获于
2025/12/03 16:54
3 个月前
此快照最后确认于
2025/12/03 16:54
3 个月前
查看原文

思路:

首先题目要求我们删掉最少的边数,使图没有环。因为删边操作不好做,所以考虑加边。把输入的边一条条加进去,当图出现环时,说明这一条边需要删除,把它加入答案。这时这条边就不用加了。加边的操作我们也可以用并查集高效维护。

代码:

CPP
#include<bits/stdc++.h>
//#define int long long
using namespace std;
int n,m,f[200005],ans;
int find(int x){
	if(f[x]==x) return x;
	return f[x]=find(f[x]);
}
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;++i) f[i]=i;
	while(m--){
		int a,b;cin>>a>>b;
		if(find(a)==find(b)) ++ans;
		else f[find(a)]=find(b);
	}
	cout<<ans<<'\n';
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...