1015: [JSOI2008]星球大战starwar

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

Sample Output

1
1
1
2
3
3
————————————————分割线————————————————
本题数据范围较大,若使用常规删边思路,基本不可做。
不妨逆向思考,这个问题可以等效为倒着加边,再用冰炸鸡维护即可。
 代码:
 /**************************************************************
Problem: 1015
User: shadowland
Language: C++
Result: Accepted
Time:1224 ms
Memory:14008 kb
****************************************************************/ #include "bits/stdc++.h" using namespace std ;
const int maxN = ;
struct Edge { int to , next ; } ; int head[ maxN ] , query[ maxN ] , father[ maxN ] , ans [ maxN ] ;
Edge e[ maxN ] ;
bool crash[ maxN ] , vis[ maxN ] ; long long tot ; void Init ( int N ) { for ( int i= ; i<=N ; ++i ) father[ i ] = i ;}
int getfa ( int x ) { return x ==father[ x ] ? x : father[ x ] = getfa ( father[ x ] ) ;}
inline void Union_Set ( const int x , const int y ) { father[ x ] = y ; } int INPUT ( ) {
int x = , f = ; char ch = getchar ( ) ;
while ( ch < '' || ch > '' ) { if ( ch =='-')f = - ; ch = getchar ( ) ;}
while ( ch >= '' && ch <= '' ) { x = ( x << ) + ( x << ) + ch -'' ; ch = getchar ( ) ;}
return x * f ;
} int cnt ;
inline void Add_Edge ( const int x , const int y ) {
e[ ++cnt ].to = y ;
e[ cnt ].next = head[ x ] ;
head[ x ] = cnt ;
} void Insert ( int x ) {
int px = getfa ( x ) ;
for ( int i=head[ x ] ; i ; i = e[ i ].next ) {
if ( vis[ e[ i ].to ] ) {
int py = getfa ( e[ i ].to ) ;
if ( px == py ) continue ;
else {
--tot ;
Union_Set( py , px ) ;
}
}
}
} int main ( ) {
int N = INPUT ( ) , M = INPUT ( ) ;
Init ( N ) ;
for ( int i= ; i<=M ; ++i ) {
int _x = INPUT ( ) , _y = INPUT ( ) ;
Add_Edge ( _x , _y ) ;
Add_Edge ( _y , _x ) ;
}
int D = INPUT ( ) ;
for ( int i= ; i<=D ; ++i ) {
query[ i ] = INPUT ( ) ;
crash[ query[ i ] ] = true ;
}
for ( int i= ; i<N ; ++i ) {
if ( !crash[ i ] ) {
++tot ;
Insert ( i ) ;
vis[ i ] = true ;
}
}
ans [ D + ] = tot ;
for ( int i=D ; i>= ; --i ) {
++ tot ;
Insert ( query[ i ] ) ;
vis[ query[ i ] ] = true ;
ans [ i ] = tot ;
}
for ( int i= ; i<=D+ ; ++i ) {
printf ( "%d\n" , ans[ i ] ) ;
}
return ;
}

1015

NOIP_RP++:

2016-10-11 04:03:45

(完)

 

BZOJ 1015 题解的更多相关文章

  1. bzoj 1015 星球大战starwar

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1015 题解: 如果按照题目的意思,每次删点.删边太困难了……于是采用逆向思维,构造出最后的 ...

  2. BZOJ 1015: [JSOI2008]星球大战starwar 并查集

    1015: [JSOI2008]星球大战starwar Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝 ...

  3. BZOJ 1015 [JSOI2008]星球大战starwar

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 3551  Solved: 1581[Submit ...

  4. bzoj一句话题解

    发现好多人都在搞这个...本人也想来试试(Solved刚到70就搞这个靠不靠谱啊喂).会更新的.嗯. 1000-1029 1000 A+B problem (这个还需要一句话吗?). 1001 狼抓兔 ...

  5. BZOJ 3732 题解

    3732: Network Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ...

  6. BZOJ 1015 星球大战

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  7. bzoj 1015: [JSOI2008]星球大战starwar (逆向思维+并查集)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1015 思路: 题目是要我们对当前图拆掉k个点,问,每拆一个点后图中有多少个联通块,我们可以逆 ...

  8. bzoj 2669 题解(状压dp+搜索+容斥原理)

    这题太难了...看了30篇题解才整明白到底咋回事... 核心思想:状压dp+搜索+容斥 首先我们分析一下,对于一个4*7的棋盘,低点的个数至多只有8个(可以数一数) 这样的话,我们可以进行一个状压,把 ...

  9. BZOJ 1015: [JSOI2008]星球大战starwar(并查集求连通块+离线处理)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1015 题意: 思路:好题啊!!! 这道题目需要离线处理,先把所有要删的点给保存下来,然后逆序加点,这 ...

随机推荐

  1. Eclipse 快捷键 转换为Netbeans 快捷键

    一直使用netbeans IDE开发,习惯了netbeans的快捷键,最近要开发个app就选择了H5. 接着使用了HBuilder (基于Eclipse开发) 总体来讲这个IDE还可以,不管是代码提示 ...

  2. 解决Pyqt打包后运行报错:应用程序无法启动 因为程序的并行配置不正确

    做了一个生成二维码的小程序:http://www.cnblogs.com/dcb3688/p/4241048.html 直接运行脚本没问题,用pyinstaller打包后再运行就直接报错了: 应用程序 ...

  3. Oralce sysaux WRH$_ACTIVE_SESSION_HISTORY清理

    In this Document Symptoms Cause Solution References Symptoms sysaux表空間的WRH$_ACTIVE_SESSION_HISTORY表變 ...

  4. nodejs2

    jade@1.11.0 严格注意缩进 extends layout block content h1= title p Welcome to #{title} - var a='abc'; p his ...

  5. 面试题之【打印1到最大的N位数】

    题目描述:给定一个数字N,打印从1到最大的N位数. 看起来像是很简单的问题(虽然实际也不是很难...)我们很容易写出这样的代码: #include<iostream> #include&l ...

  6. NDK-gdb

    http://www.gnu.org/software/gdb/download/ http://mhandroid.wordpress.com/2011/01/23/using-eclipse-fo ...

  7. 处理FF margin-top下降问题

    处理DIV子级ZImargin-top下降,父级更着下降问题 html结构如下 <div id="top"> <div id="zi"> ...

  8. 通信原理实践(六)——基带传输

    一.基带传输引入 1.从数字带通传输说起 以上系统可以等价为: 这里"等价"的假设条件是 •信号通过滤波器不失真 •不存在码间串扰 意义:可以通过评估基带传输系统来获得数字带通传输 ...

  9. flex模拟微信布局

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  10. 【转】HTML网页中插入视频各种方法

    现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera.Mozilla.Chrome),支持H.264的(Safari.IE ...