博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[JSOI2008]星球大战
阅读量:6036 次
发布时间:2019-06-20

本文共 809 字,大约阅读时间需要 2 分钟。

题目大意:有一个无向图,依次击破一些点,求每次击破后的联通块个数

题解:离线解决,把击破变成添加,倒着处理,每次添加节点时把与它相连的边加入图中,用并查集维护,求出答案

 

C++ Code:

#include
using namespace std;const int maxm=200010;const int maxn=400010;int n,m,k,num;int ans[maxn],f[maxn],s[maxn];bool v[maxn];int head[maxn],cnt;struct Edge{ int from,to,nxt;}e[maxm<<1];void add(int a,int b){ e[++cnt]=(Edge){a,b,head[a]}; head[a]=cnt;}int find(int x){return x==f[x]?x:(f[x]=find(f[x]));}int main(){ scanf("%d%d",&n,&m); for (int i=0;i
=0;i--){ v[s[i+1]]=0; for (int j=head[s[i+1]];j;j=e[j].nxt){ int ne=e[j].to; if (v[ne])continue; int x=find(e[j].from),y=find(ne); if (x!=y){ num++; f[x]=f[y]; } } ans[i]=n-i-num; } for (int i=0;i<=k;i++)printf("%d\n",ans[i]); return 0;}

 

转载于:https://www.cnblogs.com/Memory-of-winter/p/7987392.html

你可能感兴趣的文章
某机字长为32位,存储容量为64MB,若按字节编址.它的寻址范围是多少?
查看>>
VC++ 监视文件(夹)
查看>>
【转】keyCode对照表及JS监听组合按键
查看>>
[Java开发之路](14)反射机制
查看>>
mac gentoo-prefix安装git svn
查看>>
浅尝异步IO
查看>>
C - Train Problem II——(HDU 1023 Catalan 数)
查看>>
Speak loudly
查看>>
iOS-在项目中引入RSA算法
查看>>
[译] 听说你想学 React.js ?
查看>>
gulp压缩合并js与css
查看>>
块级、内联、内联块级
查看>>
Predicate
查看>>
[面试题记录01]实现一个function sum达到一下目的
查看>>
这个季节的忧伤,点到为止
查看>>
mysql通过配置文件进行优化
查看>>
省级网站群建设关注点
查看>>
工作第四天之采集资源
查看>>
留与后人一段面试的总结
查看>>
Spring基于XML方式配置事务
查看>>