牛客-加边的无向图(思维+并查集)

简介: 牛客-加边的无向图(思维+并查集)

原题链接:更好的阅读体验~

题目描述

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


输入描述:

第一行两个正整数 n 和 m 。

接下来的m行中,每行两个正整数 i 、 j ,表示点i与点j之间有一条无向道路。

输出描述:

输出一个整数,表示答案

示例1

输入

复制

4 2

1 2

3 4

输出

复制

1

备注:

对于100%的数据,有n,m<=100000。

思路:

给定的m条边不一定能够联通所有点,只需要计算出联通块个数,-1即可。

因为3个区域只需要2条边就可以联通,所以答案是个数-1。

求联通块的话,可以用并查集或dfs

类似的题:传送门

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+7;
///联通块个数-1
int root[maxn],n,m;
int Find(int x){
    if(x!=root[x]) root[x]=Find(root[x]);
    return root[x];
}
void Union(int x,int y){
    x=Find(x),y=Find(y);
    if(x!=y) root[y]=x;
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) root[i]=i;///并查集初始化
    int a,b;
    while(m--){
        scanf("%d%d",&a,&b);
        Union(a,b);
    }
    int num=0;
    for(int i=1;i<=n;i++)
        if(root[i]==i) num++;
    printf("%d\n",num-1);
    return 0;
}

还是很简单的吧~

虽然万事开头难,但是希望题单开头会容易一点

目录
相关文章
牛客刷题之图论-最小生成树
牛客刷题之图论-最小生成树
85 0
牛客刷题之图论-最短路
牛客刷题之图论-最短路
61 0
|
算法 Android开发
LeetCode 周赛上分之旅 #48 一道简单的树上动态规划问题
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
66 1
|
5月前
【洛谷 P2089】烤鸡(深度优先搜索)
## 摘要: 猪猪Hanke的烤鸡问题要求找出所有配料组合,使得$10$种配料(每种$1$到$3$克)的总和等于给定美味程度$n$。输入为正整数$n$,输出为方案总数及所有符合条件的配料分配,按字典序排列。样例输入$11$,输出$10$种方案。代码采用递归搜索,先计数再打印方案。$n\leq5000$时保证数据覆盖。
30 0
|
5月前
|
机器学习/深度学习
技术经验解读:【最小生成树】新的开始(newstart)解题报告
技术经验解读:【最小生成树】新的开始(newstart)解题报告
27 0
数据结构实验之图论四:迷宫探索
数据结构实验之图论四:迷宫探索
|
6月前
【一刷《剑指Offer》】面试题 18:树的子结构
【一刷《剑指Offer》】面试题 18:树的子结构
|
6月前
|
算法
讲课:拓扑排序、最短路算法
讲课:拓扑排序、最短路算法
|
6月前
|
算法 C++
一题带你写出图论算法模板!!!
一题带你写出图论算法模板!!!
每日刷题|回溯法解决组合问题
每日刷题|回溯法解决组合问题