【BZOJ1015】[JSOI2008]星球大战starwar 并查集
来源:互联网 发布:淘宝网盈利模式分析 编辑:程序博客网 时间:2024/04/28 09:49
只需离线反向维护并查集,建立被摧毁的边,并更新答案……
[JSOI2008]星球大战starwar C++代码实现:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define N 400010#define M 200010int n,m;int head[N],to[2*M],next[2*M],cnt;int f[N],t[N],v[N],ans[N];void add(int x,int y){to[++cnt]=y;next[cnt]=head[x];head[x]=cnt;}int find(int x){return x==f[x]?x:f[x]=find(f[x]);}int main(){cin>>n>>m;for(int x,y,i=1;i<=m;i++)scanf("%d%d",&x,&y),add(x+1,y+1),add(y+1,x+1);cin>>t[0];for(int i=1;i<=t[0];i++)scanf("%d",&t[i]),v[++t[i]]=1;for(int i=1;i<=n;i++)f[i]=i;ans[t[0]+1]=n-t[0];for(int i=1;i<=n;i++)if(!v[i])for(int j=head[i];j;j=next[j])if(!v[to[j]]){ int fx=find(i),fy=find(to[j]); if(fx!=fy) f[fx]=fy,ans[t[0]+1]--; }for(int i=t[0];i;i--){v[t[i]]=0;ans[i]=ans[i+1]+1;for(int j=head[t[i]];j;j=next[j])if(!v[to[j]]){ int fx=find(t[i]),fy=find(to[j]); if(fx!=fy) f[fx]=fy,ans[i]--; }}for(int i=1;i<=t[0]+1;i++)printf("%d\n",ans[i]);}
0 0
- 【BZOJ1015】[JSOI2008]星球大战starwar 并查集
- 【bzoj1015】【JSOI2008】【星球大战】【starwar】【并查集】
- [BZOJ1015][JSOI2008]星球大战starwar-并查集
- BZOJ1015 [JSOI2008]星球大战starwar(并查集)
- [BZOJ1015][JSOI2008]星球大战starwar(并查集)
- BZOJ1015: [JSOI2008]星球大战starwar 并查集 离线处理
- 并查集——BZOJ1015 [JSOI2008]星球大战starwar
- 【并查集+离线】BZOJ1015 [JSOI2008]星球大战starwar
- BZOJ1015(JSOI2008)[星球大战starwar]题解--并查集
- bzoj1015: [JSOI2008]星球大战starwar(并查集)
- BZOJ1015 星球大战starwar (并查集)
- BZOJ1015 [JSOI2008]星球大战starwar——逆向思维并查集+路径压缩
- 【BZOJ1015】[JSOI2008]星球大战starwar
- bzoj1015[JSOI2008]星球大战starwar
- bzoj1015: [JSOI2008]星球大战starwar
- [BZOJ1015][JSOI2008]星球大战starwar
- [BZOJ1015] [JSOI2008]星球大战starwar
- [BZOJ1015][JSOI2008]星球大战starwar
- 开发环境mac+git+linux备忘
- 【BZOJ1041】[HAOI2008]圆上的整点 数学
- eclipse中Android模拟器,DDMS看不到设备
- c++中strstr函数的几种实现方法
- x = x+1,x+=1,x++那个的执行效率高
- 【BZOJ1015】[JSOI2008]星球大战starwar 并查集
- Java UDP网络编程 - 最简单示例
- 【无限互联】集成友盟分享SDK
- POJ1258-Agri-Net-ACM
- Hibernate中Session.get()方法和load()方法的详细比较
- mysql2 和 ruby on rails
- 圈复杂度
- 线性筛法(欧拉筛法)
- verilog中的function用法与例子