Ural_1671. Anansi's Cobweb(并查集)
/*思路参考大牛,我脑袋被lv踢了,居然想到用数状数组写。。。思路:并查集,先把不许要删的边用并查集合并,然后把需要删的边逆序加入到并查集中。。。。 My Code:*/ #include <iostream>#include <cstdio>#include <cstring> using namespace std; const int N = 100005; struct node {int s;int e;}g[N]; int parent[N];int c[N];int ans[N];int Rank[N];bool vis[N]; void init(int n) {for(int i = 1; i <= n; i++) { parent[i] = i; Rank[i] = 0; vis[i] = false; }} int find(int x) {int k, r, j; r = x; k = x;while(r != parent[r]) { r = parent[r]; }while(k != r) { j = parent[k]; parent[k] = r; k = j; }return r;} void union_set(int x, int y) { x = find(x); y = find(y);if(x == y) return;if(Rank[x] > Rank[y]) parent[y] = x;else { parent[x] = y;if(Rank[x] == Rank[y]) ++ Rank[y]; }} int main() {//freopen("data.in", "r", stdin); int n, m, i, k, cnt;while(~scanf("%d%d", &n, &m)) { init(n); cnt = 0;for(i = 1; i <= m; i++) { scanf("%d%d", &g[i].s, &g[i].e); vis[i] = true; } scanf("%d", &k);for(i = 0; i < k; i++) { scanf("%d", &c[i]); vis[c[i]] = false; } for(i = 1; i <= m; i++) {if(!vis[i]) continue;if(find(g[i].s) != find(g[i].e)) { union_set(g[i].s, g[i].e); cnt++; } } for(i = k-1; i >= 0; i--) { ans[i] = n-cnt;if(find(g[c[i]].s) != find(g[c[i]].e)) { union_set(g[c[i]].s, g[c[i]].e); cnt++; } } for(i = 0; i < k; i++) { printf("%d", ans[i]);if(i == k-1) putchar('\n');else putchar(''); } }return 0;}
转载于:https://www.cnblogs.com/vongang/archive/2011/11/21/2257632.html
Ural_1671. Anansi's Cobweb(并查集)相关推荐
- Ural1671 Anansi's Cobweb 并查集
倒着来 水题 1671. Anansi's Cobweb Time limit: 1.0 second Memory limit: 64 MB Usatiy-Polosatiy XIII decide ...
- URAL 1671 Anansi's Cobweb (并查集)
一道思维题. 传送门:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20482 题意: 有一张无向图.给Q次删边操作,问每次操 ...
- 1671. Anansi's Cobweb(并查集)
1671 并查集 对于询问删除边之后的连通块 可以倒着加边 最后再倒序输出 1 #include <iostream> 2 #include<cstdio> 3 #includ ...
- URAL1671 Anansi's Cobweb(离线做 + 并查集)
传送门 大意:给出一个无向图,删除Q条边,每删除一次就询问一次目前的连通块的数目. 思路:离线搞, 把删边转换为加边,每加一次边,若两个顶点不连通就用并查集把着这两个连通块合并. 代码: #inclu ...
- Ural 1671 - Anansi's Cobweb 倒过来做...并查集维护..
题意: 给出一个无向图..然后不断的删边..问每次删边后..整个图是由几个联通块组成的.... 题解: 以前做过一个题..是CF上面的...是不断的删边..并询问某两点的最短路..当时的方法是倒过来. ...
- 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈
题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法
tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...
- POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树
一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...
最新文章
- AI应届生年薪涨到40万了,你现在转行还来得及!
- tcpdump的使用
- 【libsvm 错误使用mex】
- movzbl和movsbl
- python imshow彩色_python中plt.imshow与cv2.imshow显示颜色问题
- Win 7 通过事件管理器查看计算机开机关机时间
- 速度最快250fps!实时、高性能车道线检测算法LaneATT
- matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记
- 2021最新大厂面试题集锦
- 小程序navigator点击有时候会闪一下
- linux部署java命令
- php7.1.1一键安装/配置文件简单优化
- 自动驾驶 2-5 自动驾驶汽车的未来 The Future of Autonomous Vehicles
- 控制反转与依赖注入概述——Spring IOC/DI(一)
- webservice解析xml文件
- 亚特兰蒂斯_亚特兰蒂斯的命运与可下载内容的作用
- 共享服务器与独立服务器的区别是什么?
- 实现jquery双击图片放大
- 圣思园-----Java SE Lesson 7
- Revit“原点”、“中心”、“测量点”在哪里?
热门文章
- 论文【Learning to Localize Sound Source in Visual Scenes】soundnet的复现
- 跨境电商系列 | 防范第三方脚本对数据隐私与安全的侵蚀
- HTML标签与CSS样式
- 大话赛宁云 | 演系列-超仿真网络空间“演武场”
- 会议签到评分系统功能需求2020-5-9
- word、ppt文档比较
- AtCoder - agc005_b(单调栈)
- 多次 ifconfig down 无效的问题
- python学习笔记分享(四十)网络爬虫(7)反爬虫问题,解决中文乱码,登陆和验证码处理
- 钙通道阻滞剂/拮抗剂的应用