给定一个图中有n个点m条边,往图中不断删边并每次输出图被分成了几块。
使用并查集,相互连边的点放到同一个子集中去,这样一来就可以知道图被分成了几块。
但是并查集只能往里面加边却难以删掉一条特定的边,因此先用不会被删除的边建图,遍历并查集可得到删掉所有特定的边后图被分成的块数,然后往里添加最后被删的那条边,不断往前增加,知道添加到第二条被删的边为止。
在增加边时可以先判断边的两个端点u,v是否处在同一个子集内,如果是则子集的数量不变,反之子集的数量减一。

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>using namespace std;const int maxn = 100000 + 5;
const int maxm = 100000 + 5;struct edge {int u, v;
};edge e[maxm];
int del[maxm];
bool mark[maxm];
vector<int> ans;int par[maxn];
int rk[maxn];void init(int n) {for (int i = 0; i < n; i++) {par[i] = i;rk[i] = 0;}
}int find(int x) {if (par[x] == x) {return x;} else {return par[x] = find(par[x]);}
}void unite(int x, int y) {x = find(x);y = find(y);if (x == y) {return;}if (rk[x] < rk[y]) {par[x] = y;} else {par[y] = x;if (rk[x] == rk[y]) {rk[x]++;}}
}bool same(int x, int y) {return find(x) == find(y);
}int piece(int n) {int cnt = 0;for (int i = 0; i < n; i++) {if (par[i] == i) {cnt++;}}return cnt;
}int main(int argc, char const *argv[]) {int n, m;while (scanf("%d%d", &n, &m) == 2) {for (int i = 0; i < m; i++) {scanf("%d%d", &e[i].u, &e[i].v);}init(n);int q;scanf("%d", &q);for (int i = 0; i < q; i++) {int x;scanf("%d", &x);mark[x-1] = 1;del[i] = x - 1;}for (int i = 0; i < m; i++) {if (!mark[i]) {unite(e[i].u, e[i].v);}}int cnt = piece(n);ans.push_back(cnt);for (int i = q - 1; i >= 1; i--) {int x = e[del[i]].u;int y = e[del[i]].v;if (!same(x, y)) {ans.push_back(--cnt);} else {ans.push_back(cnt);}unite(x, y);}reverse(ans.begin(), ans.end());for (int i = 0; i < ans.size(); i++) {printf("%d%c", ans[i], i < ans.size() - 1 ? ' ' : '\n');}memset(mark, 0, sizeof(mark));memset(del, 0, sizeof(del));ans.clear();}return 0;
}

Ural1671-Anansi's Cobweb相关推荐

  1. Ural1671 Anansi's Cobweb 并查集

    倒着来 水题 1671. Anansi's Cobweb Time limit: 1.0 second Memory limit: 64 MB Usatiy-Polosatiy XIII decide ...

  2. Ural1671 Anansi's Cobweb

    题意: n个结点,m条边构成一个连通图, 删除t条边,输出没删除一条边, 图会被分成几块 Solution 反向并查集,同样不难~ 代码 #include<bits/stdc++.h> u ...

  3. URAL1671 Anansi's Cobweb(离线做 + 并查集)

    传送门 大意:给出一个无向图,删除Q条边,每删除一次就询问一次目前的连通块的数目. 思路:离线搞, 把删边转换为加边,每加一次边,若两个顶点不连通就用并查集把着这两个连通块合并. 代码: #inclu ...

  4. Ural 1671. Anansi's Cobweb(并查集)

    题目链接:点击打开链接 思路: 由于我们对删除边之后的状态很难处理, 我们可以考虑对询问倒着处理, 转化成对集合的合并问题. 细节参见代码: #include <cstdio> #incl ...

  5. Ural 1671. Anansi's Cobweb

    PRO IS HERE Union_Find set: 并查集. 注意我们从后往前加边,离线算法. 如果有某条边删除两次以上,只保留较早的那个删除操作,实现时用vis判断. CODE: #includ ...

  6. 1671. Anansi's Cobweb(并查集)

    1671 并查集 对于询问删除边之后的连通块 可以倒着加边 最后再倒序输出 1 #include <iostream> 2 #include<cstdio> 3 #includ ...

  7. ural 1671 Anansi's Cobweb

    这道题是并差集的简单应用 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #de ...

  8. URAL 1671 Anansi's Cobweb (并查集)

    一道思维题. 传送门:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20482 题意: 有一张无向图.给Q次删边操作,问每次操 ...

  9. Ural 1671 - Anansi's Cobweb 倒过来做...并查集维护..

    题意: 给出一个无向图..然后不断的删边..问每次删边后..整个图是由几个联通块组成的.... 题解: 以前做过一个题..是CF上面的...是不断的删边..并询问某两点的最短路..当时的方法是倒过来. ...

  10. Ural_1671. Anansi's Cobweb(并查集)

    /*思路参考大牛,我脑袋被lv踢了,居然想到用数状数组写...思路:并查集,先把不许要删的边用并查集合并,然后把需要删的边逆序加入到并查集中.... My Code:*/ #include <i ...

最新文章

  1. AIFramework框架Jittor特性(下)
  2. SAP MM 标准采购组织的分配对于寄售采购订单收货的影响
  3. UVALive - 3902 Network
  4. ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph(有源上下界最大流 模板)
  5. Navcat:1251 client does not support ...问题
  6. 前台一键备份数据库+PHP实现方式
  7. 【容器云】十分钟快速构建 Influxdb+cadvisor+grafana 监控
  8. php redis高并发秒杀超卖解决测试
  9. Objective-C 协议(protocol)
  10. 国内首个SENT 信号解析软件 适配NXP KMA321, melexis MLX90372等SENT信号输出芯片 完美替代PicoScope 解析SENT
  11. 推荐一个好用的epub转pdf工具
  12. AXI 总线基本概念 - 如何理解outstanding传输
  13. begintrans返回值_BeginTransaction() 方法
  14. React生命周期详解
  15. qq三国行脚商脚本思路分享
  16. 1193 Eason
  17. 小鸟云服务器FTP上传中断是什么原因?解决方法总结
  18. js实现数字的千分化
  19. asp毕业设计——基于asp+access的商品销售网站设计与实现(毕业论文+程序源码)——商品销售网
  20. SAP开发框架系列之 自定义单据

热门文章

  1. 手机游戏软件开发的前景 The future of development of game software on mobiles
  2. 微信小程序:小程序内用户帐号登录规范调整和优化建议
  3. 集成Euraka的SpringBoot工程禁止输出日志:ConfigClusterResolver : Resolving eureka endpoints via configuration的方法
  4. 计算机专业专业导论论文题目,计算机专业导论论文.doc
  5. 如何做出好看的三维平面地图?
  6. python爬取酷狗音乐url_python-从酷狗下载爬取自己想要的音乐-可以直接拿来体验哟...
  7. 开始撸lodash源码
  8. 36个助你成为专家需要掌握的JavaScript概念
  9. 调用个人微信的API接口实现微信收发消息
  10. 游客 计算机英语,游客的英文,游客怎么都用英语!