题意 :

  • 给一n个点m条边的无向图,问逐渐删去1-n点及它们的边,分别输出当前剩下多少个连通区域

思路 :

  • 求连通块,想到了并查集,但并查集是增边,这里是减边,只要倒序考虑问题即可,那么问题转换为 :
  • 逐渐增加n-1点,同时增加当前i点与j点(j>i)(j>i)(j>i)的边,问添加i点后的连通块数量
  • 暴力会tle,考虑优化方案,输入边时,只存小的往大的边
  • 对于每个逐渐加入的点i,连通块个数先加一;每增加一条边,如果另一个端点不在同一个并查集内,则连通块数量减一
  • 全局变量ans记录当前连通块数量,就不用每次算一遍了
  • 注意最开始还有一个0的状态,以及最后是加到2为止,而不是1(看图)
  • 有一个易错点!!并查集的时候不要轻易u=find(u),因为在循环里,会改变循环变量,死循环
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <unordered_set>
#include <math.h>
#define endl '\n'
#define fi first
#define se second
#define pb push_backusing namespace std;
using ll = long long;typedef pair<int, int> PII;const int N = 2e5 + 10;int pa[N];int find(int x)
{if (pa[x] != x) pa[x] = find(pa[x]);return pa[x];
}int main()
{cin.tie(nullptr) -> sync_with_stdio(false);int n, m; cin >> n >> m;vector<vector<int>> g(n + 1);for (int i = 1, u, v; i <= m && cin >> u >> v; i ++ ) g[u].pb(v);//    vector<int> pa(n + 1);for (int i = 1; i <= n; i ++ ) pa[i] = i;vector<int> res = {0};int ans = 0;        // 当前连通块数量for (int u = n; u >= 2; u -- ){ans ++ ;     // 连通块+1for (auto v : g[u])        // 枚举每条当前要加的边{//            u = find(u), v = find(v);int uu = find(u), vv = find(v);if (uu != vv)    // 如果当前不在同一连通块内{ans -- ;    // 两个连通块合并,连通块个数-1pa[uu] = vv;  // 连通块合并}}res.pb(ans);}reverse(res.begin(), res.end());for (auto x : res) cout << x << endl;return 0;
}

Graph Destruction 并查集,图论(500)相关推荐

  1. 【CF#505B】Mr. Kitayuta's Colorful Graph (并查集或Floyd或BFS)

    题干: Mr. Kitayuta has just bought an undirected graph consisting of n vertices and m edges. The verti ...

  2. 【XSY2469】graph 分治 并查集

    题目大意 给你一张\(n\)个点\(m\)条边的无向图,问删去每个点后,原图是不是二分图. \(n,m\leq 100000\) 题解 一个图是二分图\(\Longleftrightarrow\)该图 ...

  3. 并查集(图论) LA 3644 X-Plosives

    题目传送门 题意:训练指南P191 分析:本题特殊,n个物品,n种元素则会爆炸,可以转移到图论里的n个点,连一条边表示u,v元素放在一起,如果不出现环,一定是n点,n-1条边,所以如果两个元素在同一个 ...

  4. D. Harmonious Graph【并查集】

    You're given an undirected graph with n nodes and m edges. Nodes are numbered from 1 to n. The graph ...

  5. Harmonious Graph (并查集 —父亲为最大值)

    You're given an undirected graph with n nodes and m edges. Nodes are numbered from 1 to n. The graph ...

  6. 图论 + 并查集 ----最小生成树重构图 + 可撤销并查集 + set启发式合并 时间线上的离线求解 D. Graph and Queries

    解题思路 题目大意: 就是给你一个无向图,每个点都有一个权值,和qqq次询问 每次询问有两种操作 1 x:就询问从x点出发,能访问到的最大权值是多少,并把最大权值那个点的权值设置为0 2 x:就是删除 ...

  7. 图论500题 ---- 并查集求路径上最大值最小不超过K的点对数 HDU Portal

    题目链接 题目大意: 就给你一个图,qqq次询问,问你这个图上有多少对点之间的所以路径上的最大值的最小值不超过kkk? 解题思路: 首先我们知道这本质上就是求两个点联通的路径上的最大值最小是多少? 那 ...

  8. 图论8 并查集深入解析——边带权并查集和拓展域并查集和最小生成树

    我们先复习一下并查集的基本知识. 并查集的三个操作:查询,初始化,合并:并查集的结构:操作方法以及代码:路径压缩优化(详见<图论7 弗洛伊德&并查集算法详解>). 补充一下,并查集 ...

  9. 证明kruskal算法求解图的最小生成树具有贪心选择性质_将并查集应用在图论中的最小生成树算法——Kruskal...

    点击上方蓝字,和我一起学技术. 今天是算法和数据结构专题的第19篇文章,我们一起来看看最小生成树. 我们先不讲算法的原理,也不讲一些七七八八的概念,因为对于初学者来说,看到这些术语和概念往往会很头疼. ...

最新文章

  1. c3p0数据源配置抛出Could not load driverClass com.mysql.jdbc.Driver的解决方案
  2. mysql 错误1136_mysql,_MySQL错误:Error Code: 1136,mysql - phpStudy
  3. BZOJ5467 PKUWC2018Slay the Spire(动态规划)
  4. Netty学习笔记(六)Pipeline的传播机制
  5. parallels desktop网络初始化失败_秘籍在手,训练不愁!特斯拉AI负责人Karpathy的超全神经网络训练套路...
  6. easyui edatagrid 触发编辑行回掉onEdit
  7. GAN生成对抗网络基本概念及基于mnist数据集的代码实现
  8. OpenStack Glance简介
  9. c语言定义字符数组数码管,数组数码管
  10. C++函数指针使用示例
  11. JavaScript学习总结(13)——JavaScript常用正则表达式
  12. win32——消息循环 原理 函数 GetMessage PeekMessage TranslateMessage SendMessage PostMessage...
  13. 12306:春节抢票高峰已过,技术团队为自己打 90 分以上
  14. mac版有道云笔记切换笔记后内容仍展示前一个笔记内容问题解决
  15. iOS关于通知传值Bool类型的注意点
  16. Eclipse探秘-第一章-Eclipse启动(1)
  17. 【晶体管电路设计】五、渥尔曼电路设计
  18. Atitit 人工智能声音处理乐器总类以及midi规范的标示 目录 1. Atitit 乐器分类 打击乐器 1 1.1. 1.1. 打击乐器(各种鼓 三角铁等 1 2 1.2. 1.2. 管乐器
  19. 计算机求职信英语作文模板,英语自荐信范文(计算机)
  20. Mac电脑下载软件的几个网站

热门文章

  1. SAP-FICO-AR-关于剩余支付和部分支付的区别
  2. SAP SD销售收入科目确定VKOA
  3. JPopupMenu的简单使用
  4. 函数组:SPO1/2/3/4/5/6/8
  5. 导购电商成虎头蛇尾,真的不只是因为拼多多
  6. ajax等待进度数,如果ajax少于X秒,如何延迟显示进度?
  7. 嵌入式c语言为什么变量定义在前面,嵌入式C语言数据类型和变量详解
  8. win7开机动画_优化win7系统 让系统运行更顺畅
  9. opa847方波放大电路_电子设计竞赛教程-信号发生电路
  10. 关于 ESP,EBP,EIP