首页 > 加边的无向图
头像 HGDB
发表于 2020-06-06 12:55:05
思路 并查集找到联通块的个数,答案就是联通块个数减一。 因为这是无向图,所以就不用dfs跑个数了,直接裸的并查集就好了 如果没有学过并查集可以去看看这篇博客,这位大佬写的巨详细 那就直接上代码了 代码 #include<bits/stdc++.h> using namespace std 展开全文
头像 白给怪
发表于 2020-06-02 20:09:39
题目链接:https://ac.nowcoder.com/acm/problem/14685看题目好像是图论? 不存在的 ,吓唬你一下而已。这就是简单的并查集,用到的也是并查集最常规的find 和merge(合并) 操作而已在并查集基础上我用了集合,将各个不同的区域网放入了集合中,可能用不着set, 展开全文
明说是图,实际是并查集 题意是根据结点和边得个数可以得到图的个数,答案就是 (图的个数 - 1 )根据样例 #include<bits/stdc++.h> using namespace std; const int maxn = 1e5 + 5; int f[maxn]; int 展开全文
头像 tin_t
发表于 2020-06-02 21:41:58
题目链接:https://ac.nowcoder.com/acm/problem/14685思路:这道题是一个简单的并查集,只需要找出连通数的个数,然后对连通数的个数减去1就可以得到答案。 #include<iostream> using namespace std; int fa[1 展开全文
头像 DaMing
发表于 2020-06-02 10:22:27
并查集的裸体问加几条边可以使图中的点两两到达就是使图成为连通图也就是说所有点的根节点都指向一个点用数组p[j]记录j节点的根节点也就是说对于所有的点 有且仅有一个点的 p[i]=i, 也就是唯一的父亲节点 如果有两个就说明图中有两个连通块 也就是需要 一条边取联通这两个块以此类推代码 #includ 展开全文
头像 sunrise__sunrise
发表于 2020-06-03 23:00:36
并查集 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 给你一个 n 个点,m 条边的无向图,求至少要在这个的基础上加多少条无向边使得任意两个点可达~ 输入描述 展开全文
头像 威风镰鼬
发表于 2021-06-18 11:30:00
思路 我们知道,要让n个点联通,就要用n-1条边。Kruskal求最小生成树用到的边数num,那么缺的边数就是n-1-num。 代码 #include<bits/stdc++.h> using namespace std; const int maxn=100005; struct E{ 展开全文
头像 HUZHH
发表于 2024-03-01 21:26:55
一道并查集题,找出连通块个数,并用连通块数减一即得最小添加边数。 using namespace std; const int mm=1e5+5; int n,m,a,b,p[mm],ans; int find(int x){//找祖宗节点 if(p[x]==x) return x; 展开全文
头像 张广文
发表于 2020-03-23 20:19:10
include<bits/stdc++.h> using namespace std;int f[100010];void into(int x){ for(int i=0;i<x;i++) f[i]=i;}int find(int x){ if(x!=f 展开全文
头像 zjnu_tjq
发表于 2020-06-17 19:01:51
题目描述: 链接:https://ac.nowcoder.com/acm/problem/14685 给你一个 n 个点,m 条边的无向图,求至少要在这个的基础上加多少条无向边使得任意两个点可达~ 输入描述: 第一行两个正整数 n 和 m 。接下来的m行中,每行两个正整数 i 、 j ,表示点i与 展开全文