bzoj 1015 并查集
逆向思维,先将整张图以最后所有要求的点毁掉的状态建图,然后倒着
加点就行了,用并查集维护连通块
/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/
//By BLADEVIL
var
n, m, k :longint;
flag :array[..] of boolean;
pre, other, last :array[..] of longint;
delete, x, y, ans :array[..] of longint;
father :array[..] of longint;
l :longint;
procedure connect(x,y:longint);
begin
inc(l);
pre[l]:=last[x];
last[x]:=l;
other[l]:=y;
end;
procedure init;
var
i :longint;
begin
read(n,m);
for i:= to m do
begin
read(x[i],y[i]);
connect(x[i],y[i]);
connect(y[i],x[i]);
end;
read(k);
for i:= to k do
begin
read(delete[i]);
flag[delete[i]]:=true;
end;
end;
function getfather(x:longint):longint;
begin
if father[x]=x then exit(x);
father[x]:=getfather(father[x]);
exit(father[x]);
end;
procedure main;
var
i :longint;
fa, fb :longint;
cur :longint;
q, p :longint;
begin
for i:= to n- do father[i]:=i;
for i:= to m do
begin
if (not flag[x[i]]) and (not flag[y[i]]) then
begin
fa:=getfather(x[i]); fb:=getfather(y[i]);
if fa<>fb then father[fa]:=fb;
end;
end;
for i:= to n do if (not flag[i]) and (father[i]=i) then inc(ans[k+]);
for i:=k downto do
begin
cur:=delete[i];
ans[i]:=ans[i+];
q:=last[cur];
inc(ans[i]);
while q<> do
begin
p:=other[q];
if not flag[p] then
begin
fa:=getfather(p);
if fa<>cur then
begin
dec(ans[i]);
father[fa]:=cur;
end;
end;
q:=pre[q];
end;
flag[cur]:=false;
end;
for i:= to k+ do writeln(ans[i]);
end;
begin
init;
main;
end.
bzoj 1015 并查集的更多相关文章
- BZOJ 1015 并查集+离线倒序
		统计块个数写错了调了好久啊,BZOJ1696的弱化版本. #include <iostream> #include <cstring> #include <algorit ... 
- BZOJ 1015 并查集&连通块
		很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧道互相直接或 ... 
- bzoj 1171 并查集优化顺序枚举 | 线段树套单调队列
		详见vfleaking在discuss里的题解. 收获: 当我们要顺序枚举一个序列,并且跳过某些元素,那么我们可以用并查集将要跳过的元素合并到一起,这样当一长串元素需要跳过时,可以O(1)跳过. 暴力 ... 
- bzoj 2303 并查集
		首先如果没有限制的话,我们可以直接求出答案,假设对于n*m的矩阵,我们最上方一行和左方的一列随意确定,那么首先这写确定的状态肯定是不会不合法的,因为我们可以调整剩下的01状态来使得这一行一列的状态合法 ... 
- bzoj 1854  并查集 + 贪心
		思路:这个题的并查集用的好NB啊, 我们把伤害看成图上的点,武器作为边,对于一个联通块来说, 如果是一棵大小为k的树,那么这个联通块里面有k - 1个伤害能被取到,如果图上有环那么k个值都能 取到,对 ... 
- bzoj 1202 并查集
		首先我们知道若干区间和信息,判断给出信息是否合法,可以用并查集维护,我们用dis[x]表示x到father[x]的距离为多少,即区间father[x]到x的长度,这样我们可以在路径压缩的时候维护dis ... 
- BZOJ 3910 并查集+线段树合并
		思路: 1. 并查集+线段树合并 记得f[LCA]==LCA的时候 f[LCA]=fa[LCA] 2.LCT(并不会写啊...) //By SiriusRen #include <cstdio& ... 
- BZOJ 1116 并查集
		思路: 如果 每个联通块 边数>=点数 就OK 用并查集搞 //By SiriusRen #include <cstdio> #include <cstring> #in ... 
- bzoj 1050 并查集
		先按边长排序,假设s与t连通,那么我们可以枚举s与t的路径中最短的一条边,通过类似与kruskal的方法找到s与t的路径在当前最小边权情况下尽量小的最大边权,用这个比值更新答案. 特别的,我们对于某一 ... 
随机推荐
- Web 应用程序项目 MvcApplication1 已配置为使用 IIS。
			今天网上下了一个项目,加载不了,并报如下错误: Web 应用程序项目 MvcApplication1 已配置为使用 IIS. 若要访问本地 IIS 网站,必须在管理员帐户的上下文中运行 Visual ... 
- JS模块化工具requirejs教程(一):初识requirejs
			随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列复杂的需求 ... 
- JavaScript的闭包是什么意思以及作用和应用场景
			JavaScript闭包 1.什么是闭包 百度百科对于闭包的解释是:闭包是指可以包含自由(未绑定到特定对象)变量的代码块:这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中 ... 
- 在Spark中使用Kryo序列化
			spark序列化 对于优化<网络性能>极为重要,将RDD以序列化格式来保存减少内存占用. spark.serializer=org.apache.spark.serializer.Jav ... 
- php 判断table 是否存在 根据返回值继续下一步的操作
			根据sql命令创建数据库或者数据表时候,判断库或者表是否存在比较重要. //要创建的表是否已经存在 function isHaveTable( $dbName,$tableN, $con) //数据 ... 
- leetcode刷题笔记
			(1)Best Time to Buy and Sell Stock Total Accepted: 10430 Total Submissions: 33800My Submissions Say ... 
- VMware虚拟机升级过程中遇到的一点问题
			在将VWware由9.0升级到10.0的过程中,出现如下图的错误: failed to create the requested registry key Key:Installer e ... 
- LinearRegression
			利用python实现简单的线性回归对房屋面积进行预测 # -*-coding:utf-8 -*- ''' Created on 2016年12月15日 @author: lpworkdstudy '' ... 
- Web Design:给实验室UI们的一堂课(上)
			实验室的UI越来越水,设计什么的做的一塌糊涂,所以拖了很久,就想给他们讲一下设计或者说入门吧,上周末才倒出来时间. 这里放上PPT和讲稿吧,懒得去整理板式了. 主要讲了一下Web Design怎么做, ... 
- JavaScript 组件化开发之路(一)
			*:first-child{margin-top: 0 !important}.markdown-body>*:last-child{margin-bottom: 0 !important}.m ... 
