bzoj1015题解
【题意分析】
给你一张无向图,要求支持删点和询问连通块数。
【解题思路】
可以直接可持久化并查集大力艹过去。
考虑到正着删点就是倒着加点,所以并不需要可持久化。复杂度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题解的更多相关文章
- BZOJ1015[JSOI2008]星球大战starwar题解报告
题目链接 考虑正序去除点去掉其所有连边十分复杂,可以倒序离线处理,每次新建一个点,连接其连边,用并查集统计联通块的个数. 附代码 #include<iostream> #include&l ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
随机推荐
- AtomicInteger 、Synchronized 和 volatile 之间的区别?
AtomicInteger:无锁的线程安全整数??? Synchronized:同步 volatile:挥发性??? 参考文档:
- mui-scroll-wrapper mui-scroll 内容增多不出滚动条
滚动条需要初始化 mui('.mui-scroll-wrapper').scroll({});
- Delphi实现提取可执行文件内部所有图标
本实例实现的功能是能够从用户选择的可执行文件(后缀名为exe)中提取所有图标并且显示在窗体上. 在窗体中添加TImage 组件.TOpenDialog组件和TButton组件,TImage组件充当显示 ...
- Android 读取<meta-data>元素的数据
在AndroidManifest.xml中,<meta-data>元素可以作为子元素,被包含在<activity>.<application> .<servi ...
- div + css 边框 虚线
div + css 边框 虚线 dotted:[点线|有点的|点线式边框|点虚线] .introduce { border:1px dotted gray; margin:8px 5px 8px 10 ...
- EF 关键字
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/query-keywords 子句 说明 from ...
- Dynamic partition strict mode requires at least one static partition column.
https://blog.csdn.net/huobumingbai1234/article/details/81099856
- The Preliminary Contest for ICPC Asia Nanjing 2019( B H F)
B. super_log 题意:研究一下就是求幂塔函数 %m的值. 思路:扩展欧拉降幂. AC代码: #include<bits/stdc++.h> using namespace std ...
- opencv bwlabel
int bwLabel(const Mat& imgBw, Mat& imgLabeled) { Mat imgClone = Mat(imgBw.rows + , imgBw.col ...
- <爬虫>相关的知识
1.概念.工具和HTTP 什么是爬虫 模拟客户端发送网络请求,获取响应,按照规则提取数据 爬虫的数据去哪了 展示到网页上(百度新闻,今日头条) 进行分析,从数据中寻找规律(指数网站:百度指数) 需要的 ...