[JSOI2008]星球大战starwar BZOJ1015
并查集
正序处理时间复杂度为n^2,考虑逆序处理,这样,时间复杂度从n^2降为nlogn
附上代码:
- #include <cstdio>
- #include <algorithm>
- #include <cmath>
- #include <cstring>
- #include <cstdlib>
- #include <iostream>
- #include <queue>
- using namespace std;
- #define N 400005
- int fa[N<<1],n,m,K,head[N<<1],cnt,q[N],ans[N];
- struct node
- {
- int to,next;
- }e[N<<1];
- void add(int x,int y)
- {
- e[cnt].to=y;
- e[cnt].next=head[x];
- head[x]=cnt++;
- return ;
- }
- int find(int x)
- {
- int p=x,t;
- while(fa[p]!=p)p=fa[p];
- while(x!=p)t=fa[x],fa[x]=p,x=t;
- return p;
- }
- bool vis[N];
- int main()
- {
- for(int i=1;i<N;i++)fa[i]=i;
- memset(head,-1,sizeof(head));
- memset(vis,1,sizeof(vis));
- scanf("%d%d",&n,&m);
- for(int i=1;i<=m;i++)
- {
- int x,y;
- scanf("%d%d",&x,&y);
- x++,y++;
- add(x,y);
- add(y,x);
- }
- scanf("%d",&K);
- ans[K]=n-K;
- for(int i=1;i<=K;i++)
- {
- scanf("%d",&q[i]);
- q[i]++;
- vis[q[i]]=0;
- }
- for(int i=1;i<=n;i++)
- {
- if(!vis[i])continue;
- for(int j=head[i];j!=-1;j=e[j].next)
- {
- int to1=e[j].to;
- if(!vis[to1])continue;
- int fx=find(i),fy=find(to1);
- if(fx!=fy)
- {
- fa[fx]=fy;
- ans[K]--;
- }
- }
- }
- vis[q[K]]=1;
- for(int i=K-1;i>=0;i--)
- {
- ans[i]=ans[i+1]+1;
- for(int j=head[q[i+1]];j!=-1;j=e[j].next)
- {
- int to1=e[j].to;
- if(!vis[to1])continue;
- int fx=find(q[i+1]),fy=find(to1);
- if(fx!=fy)
- {
- fa[fx]=fy;
- ans[i]--;
- }
- }
- vis[q[i]]=1;
- }
- for(int i=0;i<=K;i++)
- {
- printf("%d\n",ans[i]);
- }
- return 0;
- }
[JSOI2008]星球大战starwar BZOJ1015的更多相关文章
- BZOJ1015[JSOI2008]星球大战starwar[并查集]
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 5253 Solved: 2395[Submit ...
- bzoj1015:1015: [JSOI2008]星球大战starwar
应该是全部读入之后再添加边用并查集就可以了. yyl用空间换时间.u[]v[]等将边预存起来. #include<cstdio> #include<cstring> #incl ...
- BZOJ1015 [JSOI2008]星球大战starwar(并查集)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 3895 Solved: 1750[Submit ...
- [Bzoj1015][JSOI2008]星球大战starwar(并查集)(离线处理)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 6849 Solved: 3204[Submit ...
- 1015: [JSOI2008]星球大战starwar
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MB Description 很久以前,在一个遥远的星系,一个黑暗的帝国 ...
- [1015][JSOI2008]星球大战starwar(并查集)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 2124 Solved: 909[Submit] ...
- BZOJ 1015: [JSOI2008]星球大战starwar 并查集
1015: [JSOI2008]星球大战starwar Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝 ...
- 【BZOJ】1015: [JSOI2008]星球大战starwar
1015: [JSOI2008]星球大战starwar 题意:一个点数为N(1<= 40w),边数为M(1<=20w)的图,总共删除k个节点,问开始以及每次删除一个节点之后图的连通块数? ...
- BZOJ 1015 [JSOI2008]星球大战starwar
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 3551 Solved: 1581[Submit ...
随机推荐
- N-Queens(N皇后问题)
题目: The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two que ...
- vue-cli的webpack模版,相关配置文件dev-server.js与webpack.config.js配置解析
1.下载vue-cli npm install vue-cli -g vue-cli的使用与详细介绍,可以到github上获取https://github.com/vuejs/vue-cli 2.安装 ...
- Ueditor1.3.6 setContent的一个bug
Baidu Uedtior这个版本的占位标签为script标签,UE.get("editor")操作初始化编辑器,这个初始化动作似乎是个异步动作,在这个语句之后如果setConte ...
- Python循环依赖问题的解决
一个是把某个import移到代码中间,使原先的循环依赖圈打开.
- Java main方法全解
1.main方法的重载 package cn.nxl2018; public class Main_test { public static void main(String args[]) { Sy ...
- SVD的概念以及应用
第十四章 利用SVD简化数据 一.引言 SVD的全称是奇异值分解,SVD的作用是它能够将高维的数据空间映射到低维的数据空间,实现数据约减和去除噪声的功能. SVD的特点主要有以下几个方面: 1.它的优 ...
- 简明4步,让Python的好朋友Pycharm变得更加雅观!
跟着人工智能/机械学习的兴起,Python再次取得广泛程序员的关注.而JetBrains出品的PyCharm无疑是最好用的Python IDE之一. 把本身的IDE装备安排得既有逼格又雅观,这是每个P ...
- FastDFS单机版安装
FastDFS 分布式文件系统 1 目标 了解项目中使用FastDFS的原因和意义. 掌握FastDFS的架构组成部分,能说出tracker和storage的作用. 了解FastDFS+nginx上传 ...
- Java并发之ReentrantReadWriteLock
上篇文章简单的介绍了ReentrantLock可重入锁.事实上我们可以理解可重入锁是一种排他锁,排他锁在同一个时刻只能够由一个线程进行访问.这就与我们实际使用过程中有点不想符合了,比如说当我们进行读写 ...
- msql索引
从网上找了两种解决方案: 最近要给一个表加一个联合唯一索引,但是表中的两个联合健有重复值,导致无法创建: 解决方案一:ignore(会删除重复的记录(重复记录只保留一条,其他的删除),然后建立唯一索引 ...