BZOJ1015[JSOI2008]星球大战starwar题解报告
考虑正序去除点去掉其所有连边十分复杂,可以倒序离线处理,每次新建一个点,连接其连边,用并查集统计联通块的个数。
附代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=400000+5;
int ans[MAXN],fa[MAXN],rnk[MAXN],hd[MAXN],des[MAXN];
int ff[MAXN],tt[MAXN];
int to[MAXN<<1],nxt[MAXN<<1];
bool used[MAXN];
int cnt,n,m;
inline void build(int f,int t)
{
to[++cnt]=t;
nxt[cnt]=hd[f];
hd[f]=cnt;
}
int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
}
bool unite(int x,int y)
{
x=find(x),y=find(y);
if(x==y) return 0;
if(rnk[x]==rnk[y])
fa[x]=y,++rnk[y];
else if(rnk[x]>rnk[y])
fa[y]=x;
else
fa[x]=y;
return 1;
}
int main()
{
int x,y;
scanf("%d%d",&n,&m);
for(int i=0;i<=n;++i)
fa[i]=i;
for(int i=1;i<=m;++i)
{
scanf("%d%d",&ff[i],&tt[i]);
build(ff[i],tt[i]);
build(tt[i],ff[i]);
}
int k;
scanf("%d",&k);
for(int i=1;i<=k;++i)
scanf("%d",&des[i]),
used[des[i]]=1;
int ansn=n-k;
for(int i=1;i<=m;++i)
{
if(!used[ff[i]]&&!used[tt[i]])
{
if(unite(ff[i],tt[i]))
--ansn;
}
}
for(int j=k;j>=1;--j)
{
ans[j]=ansn;
++ansn;
int u=des[j];
used[u]=0;
for(int i=hd[u];i;i=nxt[i])
{
int v=to[i];
if(used[v]) continue;
if(unite(u,v))
--ansn;
}
}
printf("%d\n",ansn);
for(int i=1;i<=k;++i)
printf("%d\n",ans[i]);
return 0;
}
BZOJ1015[JSOI2008]星球大战starwar题解报告的更多相关文章
- BZOJ1015[JSOI2008]星球大战starwar[并查集]
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 5253 Solved: 2395[Submit ...
- [Bzoj1015][JSOI2008]星球大战starwar(并查集)(离线处理)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 6849 Solved: 3204[Submit ...
- BZOJ1015 [JSOI2008]星球大战starwar(并查集)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 3895 Solved: 1750[Submit ...
- BZOJ1015 [JSOI2008]星球大战starwar
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...
- [洛谷P1197/BZOJ1015][JSOI2008]星球大战Starwar - 并查集,离线,联通块
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...
- 2018.09.26 bzoj1015: [JSOI2008]星球大战starwar(并查集)
传送门 并查集经典题目. 传统题都是把删边变成倒着加边,这道题是需要倒着加点. 处理方法是将每个点与其他点的边用一个vector存起来,加点时用并查集统计答案就行了. 代码: #include< ...
- [bzoj1015](JSOI2008)星球大战 starwar(离线+并查集)
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武 器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...
- BZOJ1015: [JSOI2008]星球大战starwar【并查集】【傻逼题】
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...
- bzoj1015: [JSOI2008]星球大战starwar 并查集+离线处理
题目传送门 这道题可以改为离线处理 倒着找答案 这样删点就变成加点了 有了这个思想题目就很好写了哇 23333 #include<cstdio> #include<cstring&g ...
随机推荐
- 与soul上的一个妹子聊天有感
写此篇的原因: 妹子说,我考上公务员了~,当时自己自己顿时哽咽了,不知道说什么,习惯性的说了句,恭喜恭喜啊.感受到妹子的欢喜与喜悦,我也没必要打扰她的兴致,她开心就好了嘛. 每个人的成就都是自己奋斗的 ...
- Codeforces Round #620 (Div. 2) D
构造一个排列,要求相邻之间的数满足给定的大小关系,然后构造出两个序列,一个序列是所有可能的序列中LIS最长的,一个所有可能的序列中LIS最短的 最短的构造方法:我们考虑所有单调递增的部分,可以发现要让 ...
- PAT (Basic Level) Practice (中文)1066 图像过滤 (15 分)
图像过滤是把图像中不重要的像素都染成背景色,使得重要部分被凸显出来.现给定一幅黑白图像,要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换. 输入格式: 输入在第一行给出一幅图像的分辨 ...
- PAT (Advanced Level) Practice 1027 Colors in Mars (20 分)
People in Mars represent the colors in their computers in a similar way as the Earth people. That is ...
- pip淘宝镜像安装
pip install virtualenvwrapper-win pip install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv ...
- Android 判断APP前台,后台运行
public void checkAppState() { ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVI ...
- Pascal运行错误表
(A)DOS错误代码 1:错误的功能代码尝试错误的操作系统调用.2:文件未找到程序试图删除.重命名和打开一个不存在的文件.3:目录未发现目录不存在或是错误,也有可能是访问一个不存在的文件.4:打开太多 ...
- 曼孚科技:AI机器学习领域常用的15个术语
机器学习是人工智能(AI)的核心,是使计算机具有智能的根本途径. 本文整理了一下机器学习领域常用的15个术语,希望可以帮助大家更好的理解这门涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多个领 ...
- AcWing 1049. 大盗阿福
//f[i,j]表示所有走了i步,且当前位于状态j的所有走法 j=1表示选第i个 j=0表示不选 //如果j=0 那么表示不选第i个 那么就可以从f[i-1,0]和f[i-1,1]转移过来 //如果j ...
- swagger2使用
添加依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swag ...