星球大战starwar(并查集)
1015: [JSOI2008]星球大战starwar
Time Limit: 3 Sec Memory Limit: 162 MB
Submit: 5253 Solved: 2395
[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
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
2
3
3
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <stack>
#include <set>
using namespace std; #define MAXN 400005 int n,m;
int T;
int f[MAXN];
vector<int> G[MAXN];
int des[MAXN];
bool vis[MAXN];
stack<int> ans; void Init(int s)
{
for (int i=;i<s;i++)
{
f[i]=i;
G[i].clear();
vis[i]=;
}
} int Find(int x)
{
if (x!=f[x])
f[x]=Find(f[x]);
return f[x];
} void He(int a,int b)
{
int fa = Find(a);
int fb = Find(b);
if (fa != fb)
{
f[fa]=f[fb];
T--;
}
} int main()
{
while (scanf("%d%d",&n,&m)!=EOF)
{
Init(n);
int a,b;
for (int i=;i<m;i++)
{
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
} int k;//破坏次数
cin>>k;
for (int i=;i<k;i++)
{
scanf("%d",&des[i]);
vis[des[i]]=;
}
T=n-k; //初始化
for (int i=;i<n;i++) //最后的连通情况
{
if (vis[i]) continue;
for (int j=;j<G[i].size();j++)
{
if (vis[G[i][j]]) continue;
He(i,G[i][j]);
}
}
ans.push(T);
for (int i=k-;i>=;i--)
{
int x = des[i];
vis[x]=;//可以连通了
T++; //新加入点
for (int j=;j<G[x].size();j++)
{
int y = G[x][j];
if (vis[y]) continue;
He(x,y);
}
ans.push(T);
}
while (!ans.empty())
{
printf("%d\n",ans.top());
ans.pop();
}
}
return ;
}
星球大战starwar(并查集)的更多相关文章
- BZOJ1015[JSOI2008]星球大战starwar[并查集]
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 5253 Solved: 2395[Submit ...
- BZOJ 1015: [JSOI2008]星球大战starwar 并查集
1015: [JSOI2008]星球大战starwar Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝 ...
- [洛谷P1197/BZOJ1015][JSOI2008]星球大战Starwar - 并查集,离线,联通块
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...
- bzoj1015: [JSOI2008]星球大战starwar 并查集+离线处理
题目传送门 这道题可以改为离线处理 倒着找答案 这样删点就变成加点了 有了这个思想题目就很好写了哇 23333 #include<cstdio> #include<cstring&g ...
- BZOJ_1015_[JSOI2008]星球大战_并查集
BZOJ_1015_[JSOI2008]星球大战_并查集 题意:很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器, ...
- P1197 [JSOI2008]星球大战(并查集判断连通块+正难则反)
P1197 [JSOI2008]星球大战(并查集判断连通块+正难则反) 并查集本来就是连一对不同父亲的节点就的话连通块就少一个. 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统 ...
- 2021.08.03 P1197 星球大战(并查集)
2021.08.03 P1197 星球大战(并查集) [P1197 JSOI2008]星球大战 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.可以离线处理.把在线变为离 ...
- bzoj1015星球大战(并查集+离线)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 5572 Solved: 2563 Descri ...
- 【JSOI2008】星球大战 (并查集)
题面 Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星 ...
随机推荐
- 关于宏:container_of和 offsetof以及list_for_each_entry
1.offsetof(TYPE, MEMBER) #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) offse ...
- 用DotSpatial下载谷歌瓦片图并展示到地图控件上 【转】
http://blog.csdn.net/caoshiying/article/details/51991647 上一篇文章讲解如何加载各地图的WMS地图服务.虽然不涉及到瓦片,但是每次地图刷新都要请 ...
- python git log
# -*- coding: utf-8 -*- # created by vince67 Feb.2014 # nuovince@gmail.com import re import os imp ...
- IntelliJ IDEA 取消控制台行数限制
在idea7之后的版本中取消了 控制台行数设置 选项,只能通过更改配置文件进行更改 在%安装目录%/bin中找到idea.properties文件,更改idea.cycle.buffer.size项值 ...
- 2017.6.26 接口测试工具postman使用总结
参考来自: http://www.cnblogs.com/sunshine-sky66/p/6369963.html http://www.cnplugins.com/tool/specify-pos ...
- PHP防止sql注入-JS注入
一:为了网站数据安全,所有和数据库操作的相关参数必须做相关过滤,防止注入引起的网站中毒和数据泄漏 1.PHP自带效验函数 mysql_real_escape_string() 函数转义 SQL 语句中 ...
- WinSock基本知识
这里不打算系统地介绍socket或者WinSock的知识.首先介绍WinSock API函数,讲解阻塞/非阻塞的概念:然后介绍socket的使用. WinSock API Socket接口是网络编程( ...
- Scrapy的介绍和用法
转载:https://www.toutiao.com/i6493421606306578958/ Scrapy是爬虫必须学会的一个框架!他确实很难搞的透彻!今天就不给大家全部介绍了!还是介绍其中的Cr ...
- JDBC编程理论知识(1)
1.SUN公司为统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC 2.JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组 ...
- 解决scrollView中嵌套viewPager的冲突问题
很简单,在外层ScrollView中添加android:fillViewport="true"属性,然后给viewPager添加一个固定高度