牛客练习赛8 加边的无向图 【并查集裸题】
来源:互联网 发布:淘宝的广告位有哪些 编辑:程序博客网 时间:2024/05/22 13:05
加边的无向图
题目描述
给你一个 n 个点,m 条边的无向图,求至少要在这个的基础上加多少条无向边使得任意两个点可达~
3输入描述:
第一行两个正整数 n 和 m 。
接下来的m行中,每行两个正整数 i 、 j ,表示点i与点j之间有一条无向道路。
输出描述:
输出一个整数,表示答案
示例1
输入
4 2
1 2
3 4
输出
1
备注:
对于100%的数据,有n,m<=100000。
题意: 略
分析: 裸的并查集题目,带路径压缩的,判断输入的点的集合的个数即可。
参考代码
#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 10;int pa[maxn];int ran[maxn];int res;void init() { for(int i = 0;i <= maxn-10;i++) { pa[i] = i; ran[i] = 0; }}int findset(int x) { return pa[x] != x ? pa[x] = findset(pa[x]) : x;}void unite (int x,int y) { x = findset(x); y = findset(y); if(x == y) return ; res--; if(ran[x] < ran[y]) { pa[x] = y; } else { pa[y] = x; if(ran[x] == ran[y]) ran[x]++; }}int main(){ init(); int n,m; cin>>n>>m; res = n; if(res == 0) { cout<<0<<endl;return 0; } for(int i = 0;i < m;i++) { int u,v;cin>>u>>v; unite(u,v); } cout<<res-1<<endl; return 0;}
- 如有错误或遗漏,请私聊下UP,thx
阅读全文
0 0
- 牛客练习赛8 加边的无向图 【并查集裸题】
- 牛客练习赛8 D加边的无向图
- wannafly 练习8 D加边的无向图
- 无向图的连通性问题(并查集)
- 无向图 多余的链接(并查集)
- Python 邻接矩阵实现无向图、有向图的三种方法,并绘图显示
- 无向图的最小边覆盖
- 无向图的边存储
- 无向图的连通性
- 无向图的实现
- 无向图的实现
- 无向图的生成
- 无向图的桥
- 无向图的邻接矩阵
- 无向图的领接表
- 无向图的连通性
- 无向图的实现
- HDU1272 - 小希的迷宫 并查集检测无向图的环
- UE4开发交流群,欢迎加入493523372
- coursera-斯坦福-机器学习-吴恩达-第7周笔记-支持向量机SVM
- Java 解压压缩文件,springMVC 接收压缩文件
- as修改主题的插件
- LBP
- 牛客练习赛8 加边的无向图 【并查集裸题】
- 牛客练习赛8 D加边的无向图
- 量化小学1之概述
- origin设置坐标刻度标签
- C语言的发展历程
- 树模型
- QT创建自己的动态库并使用
- /etc/ld.so.conf.d/目录下文件的作用
- 关于java数据结构hashSet与TreeSet重写方法的格式