1015: [JSOI2008]星球大战starwar
来源:互联网 发布:网络教育统考成绩 编辑:程序博客网 时间:2024/05/18 00:35
1015: [JSOI2008]星球大战starwar
Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 5517 Solved: 2535
[Submit][Status][Discuss]
Description
很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系。某一天,凭着一个偶然的
机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直
接或间接地连接。 但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划
地摧毁反抗军占领的星球。由于星球的不断被摧毁,两个星球之间的通讯通道也开始不可靠起来。现在,反抗军首
领交给你一个任务:给出原来两个星球之间的以太隧道连通情况以及帝国打击的星球顺序,以尽量快的速度求出每
一次打击之后反抗军占据的星球的连通快的个数。(如果两个星球可以通过现存的以太通道直接或间接地连通,则
这两个星球在同一个连通块中)。
Input
输入文件第一行包含两个整数,N (1 < = N < = 2M) 和M (1 < = M < = 200,000),分别表示星球的
数目和以太隧道的数目。星球用 0 ~ N-1的整数编号。接下来的M行,每行包括两个整数X, Y,其中(0 < = X <>
Y 表示星球x和星球y之间有“以太”隧道,可以直接通讯。接下来的一行为一个整数k,表示将遭受攻击的星球的
数目。接下来的k行,每行有一个整数,按照顺序列出了帝国军的攻击目标。这k个数互不相同,且都在0到n-1的范
围内。
Output
输出文件的第一行是开始时星球的连通块个数。接下来的N行,每行一个整数,表示经过该次打击后现存星球
的连通块个数。
Sample Input
8 13
0 1
1 6
6 5
5 0
0 6
1 2
2 3
3 4
4 5
7 1
7 2
7 6
3 6
5
1
6
3
5
7
0 1
1 6
6 5
5 0
0 6
1 2
2 3
3 4
4 5
7 1
7 2
7 6
3 6
5
1
6
3
5
7
Sample Output
1
1
1
2
3
3
1
1
2
3
3
HINT
Source
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<vector>#include<queue>#include<set>#include<map>#include<stack>#include<bitset>#include<ext/pb_ds/priority_queue.hpp>using namespace std;const int maxn = 4E5 + 40;int n,m,k,res,fa[maxn],ans[maxn],f[maxn];bool bo[maxn];vector <int> v[maxn];int getfa(int x) {return x == fa[x]?x:fa[x] = getfa(fa[x]);}void Add(int x){for (int i = 0; i < v[x].size(); i++){int y = v[x][i];if (!bo[y]) continue;int fx = getfa(x),fy = getfa(y);if (fx == fy) continue;fa[fx] = fy; --res;}}int main(){#ifdef DMCfreopen("DMC.txt","r",stdin);#endifcin >> n >> m;while (m--){int x,y; scanf("%d%d",&x,&y);v[x].push_back(y);v[y].push_back(x);}for (int i = 0; i < n; i++) bo[i] = 1;cin >> k;for (int i = 1; i <= k; i++)scanf("%d",&f[i]),bo[f[i]] = 0;for (int i = 0; i < n; i++)if (bo[i]) fa[i] = i,++res;for (int i = 0; i < n; i++) if (bo[i]) Add(i);ans[k] = res;for (int i = k; i; i--){bo[f[i]] = 1; fa[f[i]] = f[i]; ++res; Add(f[i]); ans[i-1] = res;}for (int i = 0; i <= k; i++) printf("%d\n",ans[i]);return 0;}
0 0
- 1015: [JSOI2008]星球大战starwar
- 1015: [JSOI2008]星球大战starwar
- 1015: [JSOI2008]星球大战starwar
- [BZOJ 1015][JSOI2008]星球大战starwar
- BZOJ 1015: [JSOI2008]星球大战starwar
- BZOJ 1015: [JSOI2008]星球大战starwar
- 【BZOJ 1015】 [JSOI2008]星球大战starwar
- bzoj 1015: [JSOI2008]星球大战starwar
- BZOJ 1015 [JSOI2008]星球大战starwar
- 【bzoj 1015】[JSOI2008]星球大战starwar
- bzoj 1015: [JSOI2008]星球大战starwar
- 【BZOJ 1015】 [JSOI2008]星球大战starwar
- 【BZOJ】1015: [JSOI2008]星球大战starwar
- [bzoj]1015: [JSOI2008]星球大战starwar
- bzoj 1015: [JSOI2008]星球大战starwar
- bzoj 1015: [JSOI2008]星球大战starwar
- BZOJ 1015: [JSOI2008]星球大战starwar kevin_xcw
- 【BZOJ1015】[JSOI2008]星球大战starwar
- VBA Arrays And Worksheet Ranges
- Java 面向对象 : 封装
- hdu - Problem 1175 连连看 【bfs】
- NRedis-Proxy 高性能Redis 中间件服务
- BZOJ1806: [Ioi2007]Miners 矿工配餐
- 1015: [JSOI2008]星球大战starwar
- 第十二周项目3----图遍历算法实现
- 关于我们写的第一个hello world 的由来
- 【最短路】CODE[VS] 1557 热浪 (Dijkstra模板)
- 《软件开发者路线图》读书随笔
- 关于素数的问题
- C专家编程 九 什么时候数组与指针相同(一)
- SQL 结果集合操作
- OpenGL绘制一张图片的流程--以android-openGL-canvas为例