并查集(大裸题)

并查集(大裸题),第1张

并查集(大裸题)

给你一个 n 个点,m 条边的无向图,求至少要在这个的基础上加多少条无向边使得任意两个点可达~

输入
4 2
1 2
3 4
输出
1

居然一开始看到没有立马想到并查集,ans=联通区域数-1;

ACCODE:

#include
using namespace std;
int fa[100010];
int n,m;
int find(int x){
    if(x==fa[x])return x;
    else return
        fa[x]=find(fa[x]);
}
void merge(int a,int b){
    fa[find(a)]=find(b);
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        fa[i]=i;
    }
    for(int i=1,a,b;i<=m;i++){
        cin>>a>>b;
        merge(a,b);
    }
    int cnt=0;
    for(int i=1;i<=n;i++){
        if(fa[i]==i)cnt++;
    }
    cout< 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5699435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存