传送门

并查集经典题目。

传统题都是把删边变成倒着加边,这道题是需要倒着加点。

处理方法是将每个点与其他点的边用一个vector存起来,加点时用并查集统计答案就行了。

代码:

#include<bits/stdc++.h>
#define N 400005
#define M 200005
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
int fa[N],n,m,k,q[N],ans[N],cnt;
bool vis[N];
vector<int>mp[N];
inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
int main(){
	memset(vis,false,sizeof(vis));
	cnt=n=read(),m=read();
	for(int i=1;i<=n;++i)fa[i]=i;
	for(int i=1;i<=m;++i){
		int u=read()+1,v=read()+1;
		mp[u].push_back(v),mp[v].push_back(u);
	}
	k=read();
	for(int i=1;i<=k;++i)q[i]=read()+1,vis[q[i]]=true;
	for(int i=1;i<=n;++i){
		if(vis[i])continue;
		for(int j=0;j<mp[i].size();++j)
			if(vis[mp[i][j]])continue;
			else{
				int fx=find(i),fy=find(mp[i][j]);
				if(fx!=fy)fa[fx]=fy,--cnt;
			}
	}
	ans[k+1]=cnt-k;
	for(int i=k;i>=1;--i){
		vis[q[i]]=false;
		for(int j=0;j<mp[q[i]].size();++j)
			if(vis[mp[q[i]][j]])continue;
			else{
				int fx=find(q[i]),fy=find(mp[q[i]][j]);
				if(fx!=fy)fa[fx]=fy,--cnt;
			}
		ans[i]=cnt-i+1;
	}
	for(int i=1;i<=k+1;++i)printf("%d\n",ans[i]);
	return 0;
}

2018.09.26 bzoj1015: [JSOI2008]星球大战starwar(并查集)的更多相关文章

  1. BZOJ1015[JSOI2008]星球大战starwar[并查集]

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 5253  Solved: 2395[Submit ...

  2. [洛谷P1197/BZOJ1015][JSOI2008]星球大战Starwar - 并查集,离线,联通块

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  3. bzoj1015: [JSOI2008]星球大战starwar 并查集+离线处理

    题目传送门 这道题可以改为离线处理 倒着找答案 这样删点就变成加点了 有了这个思想题目就很好写了哇 23333 #include<cstdio> #include<cstring&g ...

  4. BZOJ 1015: [JSOI2008]星球大战starwar 并查集

    1015: [JSOI2008]星球大战starwar Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝 ...

  5. BZOJ_1015_[JSOI2008]星球大战_并查集

    BZOJ_1015_[JSOI2008]星球大战_并查集 题意:很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器, ...

  6. P1197 [JSOI2008]星球大战(并查集判断连通块+正难则反)

    P1197 [JSOI2008]星球大战(并查集判断连通块+正难则反) 并查集本来就是连一对不同父亲的节点就的话连通块就少一个. 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统 ...

  7. BZOJ1015 [JSOI2008]星球大战starwar(并查集)

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 3895  Solved: 1750[Submit ...

  8. [Bzoj1015][JSOI2008]星球大战starwar(并查集)(离线处理)

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 6849  Solved: 3204[Submit ...

  9. 星球大战starwar(并查集)

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 5253  Solved: 2395[Submit ...

随机推荐

  1. HTML5 Canvas ( 文字的书写和样式控制 ) font, fillText, strokeText

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. eclipse 的project explorer问题,这个怎样把localFileSystem去掉

    转自:https://zhidao.baidu.com/question/550279043.html

  3. canal HA配置

    https://github.com/alibaba/canal/wiki/AdminGuide#ha%E6%A8%A1%E5%BC%8F%E9%85%8D%E7%BD%AE HA模式配置 1. 机器 ...

  4. UI5-文档-4.15-Nested Views

    我们的面板内容变得越来越复杂,现在是时候将面板内容移动到一个单独的视图中了.使用这种方法,应用程序结构更容易理解,应用程序的各个部分可以重用. Preview The panel content is ...

  5. const 用法

    static NSString * const testString = @"google"; //表示testString这个指针不能被修改,如若对testString赋值则会报 ...

  6. nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)

    nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory) ...

  7. VB.net 与 C# 的对应逻辑运算符

    And:对两个Boolean表达式执行逻辑和.AndAlso:与AndAlso类似,关键差异是AndAlso显示短路行为,如果AndAlso中的第一个表达式为False,则不计算第二个表达式.Or:对 ...

  8. mysql 列转行

    第一种方法:使用序列化表的方法实现列转行 第一种方法:使用UNION的方法实现列转行 第二种方法:使用序列化表的方法实现列转行

  9. JS中的继承实现方式

    第一种:通过prototype来实现 prototype.html <!DOCTYPE html><html lang="en"><head> ...

  10. 吴裕雄 数据挖掘与分析案例实战(12)——SVM模型的应用

    import pandas as pd # 导入第三方模块from sklearn import svmfrom sklearn import model_selectionfrom sklearn ...