博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1015 [JSOI2008]星球大战starwar (逆序并查集)
阅读量:5975 次
发布时间:2019-06-20

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

思路:并查集只有联边的作用,无法做到拆边,因此采取逆序做法。先将边拆掉,再用并查集进行联边,不同联通块相连则联通块数目减一。

1 #include
2 #define se second 3 #define fi first 4 #define ll long long 5 #define ls l,m,rt<<1 6 #define rs m+1,r,rt<<1|1 7 #define Pii pair
8 #define pb push_back 9 #define fio ios::sync_with_stdio(false);cin.tie(0)10 using namespace std;11 const double pi=acos(-1.0);12 const int N=1e6+5;13 using namespace std;14 int fa[N];15 int tot;16 struct node{17 int u,v;18 }q[200010];19 int a[N];20 bool vis[N];21 int ans[N];22 vector
un[N];23 void init (int x){24 for(int i=0;i<=x;i++){25 fa[i]=i;26 }27 }28 int findfa(int x){29 return fa[x]==x?x:fa[x]=findfa(fa[x]);30 }31 void unite(int x,int y){32 x=findfa(x);33 y=findfa(y);34 if(x!=y){35 fa[y]=x;36 tot--;//不同联通块相连则联通块数目减一37 }38 }39 40 int main(){41 int n,m;42 scanf("%d %d",&n,&m);43 init(n);44 for(int i=0;i
0;i--){65 tot++;//将该点设为未被打击点,并将联通块加一,因为多出来一个未被打击的联通块66 int m=a[i];67 vis[m]=0;68 for(int j=0;j

 

转载于:https://www.cnblogs.com/Mrleon/p/8401412.html

你可能感兴趣的文章
MAXIMO 快速查找实现
查看>>
Oracle——条件控制语句
查看>>
第一次作业-准备篇
查看>>
day-6 and day-7:面向对象
查看>>
CSU Double Shortest Paths 湖南省第十届省赛
查看>>
webgl像机世界
查看>>
php正则怎么使用(最全最细致)
查看>>
javascript数学运算符
查看>>
LC.155. Min Stack(非优化,两个stack 同步 + -)
查看>>
交互设计[3]--点石成金
查看>>
SCCM TP4部署Office2013
查看>>
redis主从配置<转>
查看>>
bootloader功能介绍/时钟初始化设置/串口工作原理/内存工作原理/NandFlash工作原理...
查看>>
利用console控制台调试php代码
查看>>
递归算法,如何把list中父子类对象递归成树
查看>>
讲解sed用法入门帖子
查看>>
Linux 内核已支持苹果
查看>>
shell脚本逻辑判断,文件目录属性判断,if,case用法
查看>>
【二叉树系列】二叉树课程大作业
查看>>
App重新启动
查看>>