并查集-poj-1988-Cube Stacking
来源:互联网 发布:php微信支付视频教程 编辑:程序博客网 时间:2024/05/17 04:58
#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<iostream>using namespace std;int fa[153333], ///根节点编号 ra[153333], ///到根节点距离 num[153333]; ///以这个点为根的树的大小void inti(int n) { ///初始 for(int i=1;i<=n;i++) { fa[i]=i; ra[i]=0; num[i]=1; }}int find_fa(int n) { if(n!=fa[n]) { int tt=fa[n]; ///临时储存父节点的编号,查找后会变 fa[n]=find_fa(fa[n]); ///查找根 ra[n]+=ra[tt]; ///将当前节点的权值修改为到父节点的值加上到父节点到根的值 } return fa[n];}int main(){ int p; char op[10]; scanf("%d",&p); inti(p); while(p--) { scanf("%s",op); int x,y; if(op[0]=='M') { scanf("%d%d",&x,&y); int fx=find_fa(x); int fy=find_fa(y); ///修改将fx添加到fy上 if(fx!=fy) { ///如果不是同一堆石头 fa[fx]=fy; ///将第x堆石头添加到第Y堆石头后面 ra[fx]+=num[fy]; ///将fx的到根的距离加上以fy为根的集合的个数 num[fy]+=num[fx]; ///将fy为根的集合的个数加上fx } } else { scanf("%d",&x); int fx=find_fa(x); cout << ra[x] << endl; } } return 0;}
题目意思是有n块石头,两种操作M x y和C x 前一种操作表示将有x的石头放到有y的石头堆上 后一种操作问的是x下面有多少石头。
代码如下:
0 0
- poj 1988 Cube Stacking 并查集
- poj-1988-Cube Stacking (并查集)
- poj 1988 Cube Stacking 并查集
- POJ 1988 Cube Stacking 并查集
- poj 1988 - Cube Stacking(并查集)
- poj 1988 Cube Stacking 并查集
- poj 1988 Cube Stacking 并查集
- POJ 1988 Cube Stacking(并查集)
- poj-1988-Cube Stacking (并查集)
- POJ 1988 Cube Stacking 并查集
- poj 1988 Cube Stacking(并查集)
- POJ 1988 Cube Stacking并查集
- 并查集-poj-1988-Cube Stacking
- poj-1988 Cube Stacking-并查集
- POJ 1988 Cube Stacking 并查集
- Cube Stacking POJ - 1988 并查集
- POJ-1988 Cube Stacking (并查集)
- 【POJ 1988 Cube Stacking】+ 并查集
- mysql数据库优化
- 几种排序算法总结:
- 设计模式之单例模式
- NYOJ660逃离地球——只为最大存活率~
- Activity活动(上)
- 并查集-poj-1988-Cube Stacking
- A. Far Relative’s Birthday Cake【排列组合】
- Fully Convolutional Networks for Semantic Segmentation
- apache2.2与2.4中的访问控制语句比较
- SDUSTOJ Problem B: 平面上的点——Point类 (II)
- Activity活动(中)
- android中px,dp,sp
- poj2594(二分图,最小路径覆盖变形)
- POJ3070--Fibonacci--矩阵快速幂