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

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

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

题目描述

给你一个 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;
}

还是很简单的吧~

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

目录
相关文章
|
10月前
牛客刷题之图论-最小生成树
牛客刷题之图论-最小生成树
68 0
|
10月前
牛客刷题之图论-最短路
牛客刷题之图论-最短路
54 0
|
11月前
|
算法 Android开发
LeetCode 周赛上分之旅 #48 一道简单的树上动态规划问题
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
61 1
|
3月前
|
机器学习/深度学习
技术经验解读:【最小生成树】新的开始(newstart)解题报告
技术经验解读:【最小生成树】新的开始(newstart)解题报告
21 0
数据结构实验之图论四:迷宫探索
数据结构实验之图论四:迷宫探索
|
4月前
【一刷《剑指Offer》】面试题 18:树的子结构
【一刷《剑指Offer》】面试题 18:树的子结构
|
4月前
|
算法 C++
一题带你写出图论算法模板!!!
一题带你写出图论算法模板!!!
|
12月前
|
算法
每日刷题|回溯法解决组合问题
每日刷题|回溯法解决组合问题
|
算法
算法 - 蓝桥杯并查集题型
算法 - 蓝桥杯并查集题型
|
C++
这道「岛屿题」用并查集做就体现出其威力了!
之前的岛屿题,用 DFS 和 BFS 来做要比用并查集更加好做并且高效,但是最对这一道题来说,用并查集要更加好做。
90 0