BZOJ 1015 - 变删点为加点 + 并查集维护
来源:互联网 发布:淘宝羊绒哈伦九分女裤 编辑:程序博客网 时间:2024/05/11 12:30
题意:给出一张无向图,每次删去其中一个点,每删一次就输出当前连通块的数量。
首先要明确一点:删去一个点,同时也删去了和这个点有关联的边集。但无论如何,删点并不好搞,所以我们可以考虑倒着来,加点,用并查集维护。具体来说,每次加上一个点
woc… 无向边
// BZOJ 1015#include <cstdio>#include <cstring>#include <algorithm>using namespace std; const int M=200000*2+5, N=M*2; #define rep(i,a,b) for (int i=a; i<=b; i++) #define dep(i,a,b) for (int i=a; i>=b; i--) #define read(x) scanf("%d", &x) #define fill(a,x) memset(a, x, sizeof(a)) int fa[N], cnt, n, m, ans[N], u, v, k, t, del[N]; bool exi[N]; int find(int x) { return fa[x]==x ? x : fa[x]=find(fa[x]); } struct Graph { int s, from[M], to[M], pre[M], last[N]; void init() { s=0; rep(i,0,n-1) last[i]=0; } void ine(int a, int b) { s++; from[s]=a, to[s]=b, pre[s]=last[a]; last[a]=s; } void ine2(int a, int b) { ine(a, b); ine(b, a); } } G; #define reg(i,G,u) for (int i=G.last[u]; i; i=G.pre[i]) void add(int x, int t) { cnt++; reg(i,G,x) { int y=G.to[i]; if (!exi[y]) continue; int fx=find(x), fy=find(y); if (fx!=fy) cnt--; fa[fx]=fy; } exi[x]=true; ans[t]=cnt; }int main(){ read(n); read(m); G.init(); rep(i,0,n-1) fa[i]=i; rep(i,1,m) read(u), read(v), G.ine2(u, v); read(k); fill(exi, true); rep(i,1,k) read(del[i]), exi[del[i]]=false; cnt=0; rep(x,0,n-1) if (exi[x]) add(x, n+1); ans[k]=cnt; dep(i,k,1) { int x=del[i]; add(x, i-1); } rep(i,0,k) printf("%d\n", ans[i]); return 0;}
0 0
- BZOJ 1015 - 变删点为加点 + 并查集维护
- BZOJ 1015: [JSOI2008]星球大战starwar 并查集 离线维护
- UVA12232加权并查集 加点
- BZOJ 1015 并查集
- BZOJ 1015 并查集
- 【BzoJ 3319】【黑白树】【并查集】【”猥琐欲为“】
- BZOJ 1015 逆求 并查集
- bzoj 1015 正难则反+并查集
- BZOJ 1015 并查集,逆向思考
- BZOJ 1015 星球大战 逆向并查集
- 【bzoj 2102】 [HNOI2005]狡猾的商人 带权并查集维护区间和
- [BZOJ]1050 [HAOI2006]旅行comf(并查集暴力维护两点联通)
- BZOJ 1202: [HNOI2005]狡猾的商人 并查集维护前缀和
- BZOJ 1202 并查集
- BZOJ 1854 并查集
- bzoj 1529 并查集
- BZOJ 1116 并查集
- bzoj 1116 并查集
- OpenCms for MySql安装
- Support in the Wild: My Biggest Elasticsearch Problem at Scale
- 新生代的梦想
- 40个Java 多线程问题总结
- Android_动态权限管理的解决方案
- BZOJ 1015 - 变删点为加点 + 并查集维护
- 开源选型之Android三大图片缓存原理、特性对比
- Android开发-jni的编写
- codevs[3145]汉诺塔游戏
- mysql常用语句
- 创建,修改和删除表
- Java web开发(4)
- PythonTutorial-01 一些基础知识
- 判断网络状态