【题意分析】

  给你一张无向图,要求支持删点和询问连通块数。

【解题思路】

  可以直接可持久化并查集大力艹过去。

  考虑到正着删点就是倒着加点,所以并不需要可持久化。复杂度O((k+m)α(n))。

【参考代码】

  当时还在玩泥巴,实现有点naive,常数奇大无比。。

 #include<cstdio>
#include<cstring>
#include<set>
#define REP(I,start,end) for(int I=start;I<=end;I++)
#define PER(I,start,end) for(int I=start;I>=end;I--)
using namespace std;
set<int> tree;
int n,m,k,edge=,q[],father[],head[],next[],point[],sav[];
bool destroyed[];
inline void addEdge(int from,int to)
{
next[++edge]=head[from];
head[from]=edge;
point[edge]=to;
}
inline int getFa(int n)
{
if(father[n]==n)
return n;
return father[n]=getFa(father[n]);
}
int main()
{
scanf("%d%d",&n,&m);
REP(i,,m)
{
int u,v;
scanf("%d%d",&u,&v);
addEdge(u,v);
addEdge(v,u);
}
scanf("%d",&k);
memset(destroyed,,sizeof(destroyed));
REP(i,,k)
{
scanf("%d",q+i);
destroyed[q[i]]=true;
}
REP(i,,n-)
father[i]=i;
REP(i,,n-)
if(!destroyed[i])
{
int t=head[i];
while(t)
{
int p=point[t];
if(!destroyed[p])
father[getFa(p)]=getFa(i);
t=next[t];
}
}
tree.clear();
REP(i,,n-)
{
int fa=getFa(i);
if(!destroyed[i]&&tree.find(fa)==tree.end())
tree.insert(fa);
}
sav[k]=tree.size();
PER(i,k-,)
{
int P=q[i+],t=head[P];
destroyed[P]=false;
tree.clear();
while(t)
{
int p=point[t];
if(!destroyed[p])
{
int fa2=getFa(p);
tree.insert(fa2);
father[getFa(P)]=fa2;
}
t=next[t];
}
sav[i]=sav[i+]-tree.size()+;
}
REP(i,,k)
printf("%d\n",sav[i]);
return ;
}

bzoj1015题解的更多相关文章

  1. BZOJ1015[JSOI2008]星球大战starwar题解报告

    题目链接 考虑正序去除点去掉其所有连边十分复杂,可以倒序离线处理,每次新建一个点,连接其连边,用并查集统计联通块的个数. 附代码 #include<iostream> #include&l ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

随机推荐

  1. PHP-在排序数组中查找元素的第一个和最后一个位置

    给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [ ...

  2. Python的历史及介绍

    Python的诞生 Python的创始人吉多·范罗苏姆(Guido van Rossum),在1989年12月的圣诞节期间,为了打发时间,决定开发一种新的脚本解释程序,作为ABC语言的继承. 现在,p ...

  3. ES6(阮一峰)对象的扩展

    1.属性的简洁表示法 允许直接写入变量和函数,作为对象的属性和方法. const foo = 'bar'; const baz = {foo};//等同于 const baz = {foo : &qu ...

  4. PHP实现上传视频的功能

    首先前台HTML表单代码如下: <html> <head> <meta http-equiv="Content-Type" content=" ...

  5. PHP ftp_pwd() 函数

    定义和用法 ftp_pwd() 函数返回指定 FTP 连接的当前目录名称. 语法 ftp_pwd(ftp_connection) 参数 描述 ftp_connection 必需.规定要使用的 FTP ...

  6. NX二次开发-NXOpen::Drawings::DrawingSheet Class Reference

    NX11+VS2013 #include <NXOpen/Section.hxx> #include <NXOpen/SectionCollection.hxx> #inclu ...

  7. Linux网卡驱动(4)—DM9000网卡驱动程序完全分析

    1.硬件连接 mini2440开发板上DM9000的电气连接和mach-mini2440.c文件的关系 其中片选信号AEN使用了nGCS4,所以网卡的内存区域在BANK4,也就是从地址0x200000 ...

  8. UVA 10522 Height to Area(知三角形三高求面积)

    思路:海伦公式, AC代码: #include<bits/stdc++.h> using namespace std; int main() { int n; scanf("%d ...

  9. 【AI图像识别一】人脸识别测试探索

    ****************************************************************************** 本文主要介绍AI能力平台的人脸识别技术的测 ...

  10. npm和cnpm的安装(window)

    一:安装node.js 1.进入https://nodejs.org/en/中下载自己电脑相对应的node.js. 2.将下载下来的node.js进行安装. 3.利用管理员身份打开cmd,在里面输入n ...