[JSOI2008]星球大战
正向进行很显然很BT, 所以逆向离线此题是个不错的选择. 使用并查集统计劫难之后的联通状态, 然后逐个添加结点即可.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vector>
using std::vector;
#define VERTEXMAX 400003
int set[VERTEXMAX], Des[VERTEXMAX], output[VERTEXMAX];
bool Vertex[VERTEXMAX];
vector<int> To[VERTEXMAX];
void Initialize()
{
memset(Vertex, true, sizeof(Vertex));
for (int i = ; i < VERTEXMAX; ++i)
set[i] = i;
}
int Father(int x)
{
if (set[x] == x)
return x;
return set[x] = Father(set[x]);
}
void Union(int x, int y, int &sum)
{
int a_Father = Father(x);
int b_Father = Father(y);
if (a_Father != b_Father)
{
set[a_Father] = b_Father;
--sum;
}
}
int main()
{
Initialize();
int V, E, Dn, Block, p = ;
scanf("%d %d", &V, &E);
for (int i = , x, y; i < E; To[x].push_back(y), To[y].push_back(x), ++i)
scanf("%d %d", &x, &y);
scanf("%d", &Dn);
p = Dn;
for (int i = ; i < Dn; Vertex[Des[i]] = false, ++i)
scanf("%d", &Des[i]);
Block = V - Dn;
for (int i = , j; i < V; ++i)
if (Vertex[i])
for (j = ; j < To[i].size(); ++j)
if (Vertex[To[i][j]])
Union(i, To[i][j], Block);
output[p--] = Block;
for (int i = Dn - , j, current_star; i > -; --i)
{
current_star = Des[i];
Vertex[current_star] = true;
++Block;
for (j = ; j < To[current_star].size(); ++j)
if (Vertex[To[current_star][j]])
Union(current_star, To[current_star][j], Block);
output[p--] = Block;
}
for (int i = ; i <= Dn; ++i)
printf("%d\n", output[i]);
return ;
}
[JSOI2008]星球大战的更多相关文章
- 1015: [JSOI2008]星球大战starwar
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MB Description 很久以前,在一个遥远的星系,一个黑暗的帝国 ...
- BZOJ1015[JSOI2008]星球大战starwar[并查集]
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 5253 Solved: 2395[Submit ...
- [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 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝 ...
- bzoj1015:1015: [JSOI2008]星球大战starwar
应该是全部读入之后再添加边用并查集就可以了. yyl用空间换时间.u[]v[]等将边预存起来. #include<cstdio> #include<cstring> #incl ...
- 【BZOJ】1015: [JSOI2008]星球大战starwar
1015: [JSOI2008]星球大战starwar 题意:一个点数为N(1<= 40w),边数为M(1<=20w)的图,总共删除k个节点,问开始以及每次删除一个节点之后图的连通块数? ...
- BZOJ1015 [JSOI2008]星球大战starwar(并查集)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 3895 Solved: 1750[Submit ...
- BZOJ 1015 [JSOI2008]星球大战starwar
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 3551 Solved: 1581[Submit ...
- BZOJ_1015_[JSOI2008]星球大战_并查集
BZOJ_1015_[JSOI2008]星球大战_并查集 题意:很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器, ...
- [Luogu 1197] JSOI2008 星球大战
[Luogu 1197] JSOI2008 星球大战 我算是真的沦为联赛选手了. 并查集裸题. 比较麻烦的是删点. 但是从后往前加点就好操作很多. 所以考虑离线,先存图,然后没被删的点之间,有边就合并 ...
随机推荐
- 学习hash_map从而了解如何写stl里面的hash函数和equal或者compare函数
---恢复内容开始--- 看到同事用unordered_map了所以找个帖子学习学习 http://blog.sina.com.cn/s/blog_4c98b9600100audq.html (一)为 ...
- c# 获取MP3和AMR文件格式的时长
//网上摘录整理private long GetAMRFileDuration(string fileName) { ; FileStream fs = new FileStream(fileName ...
- tomcat session思考
最近在做统计服务器在线人数时,按照当前服务器session数量来实现,具体方法:实现HttpSessionListener接口来,每次sessionCreate的时候增加1,sessionDestro ...
- 对话 Jessica Hamrick:和 Django 的情缘是我前行的动力
本文出自 Your Django Story 系列,该系列主要突出那些贡献 Django 的女性.点击查看更多,本文系 OneAPM 工程师编译整理. Jess Hamrick 是加州大学伯克利分校心 ...
- FZU 2150 Fire Game(BFS)
点我看题目 题意 :就是有两个熊孩子要把一个正方形上的草都给烧掉,他俩同时放火烧,烧第一块的时候是不花时间的,每一块着火的都可以在下一秒烧向上下左右四块#代表草地,.代表着不能烧的.问你最少花多少时间 ...
- Tomcat 6 支持 NIO -- Tomcat的四种基于HTTP协议的Connector性能比较(转载)
Tomcat从5.5版本开始,支持以下四种Connector的配置分别为: <Connector port="8081" protocol="org.apache. ...
- CDQ分治题目小结
CDQ分治属于比较特殊的一类分治,许多问题转化为这类分治的时候,时空方面都会有很大节省,而且写起来没有这么麻烦. 这类分治的特殊性在于分治的左右两部分的合并,作用两部分在合并的时候作用是不同的,比如, ...
- LINQ TO SQL 怎样 执行存储过程并返回存储过程的临时表
查了GOOGLE一下,这种办法可以解决 我的存储过程是这样的: CREATE procedure cal_month_dep_fast @begdt datetime,@endt datetime ...
- ANDROID_MARS学习笔记_S01原始版_017_绑定SERVICE
一.流程 1.编写service,重写onBind(Intent intent),返回自定义的Binder 2.自写义Binder,提供一个可访问的方法,以传递数据 3.点击界面按钮会开启servic ...
- PCB使用技巧
1.元器件标号自动产生或已有的元器件标号取消重来Tools 工具|Annotate…注释All Part:为所有元器件产生标号Reset Designators:撤除所有元器件标号2.单面板设置:De ...