博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
有权并查集,Poj(1988)
阅读量:6813 次
发布时间:2019-06-26

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

题目链接:

题目大意:

有n个从1到n编号的箱子,将每个箱子当做一个栈,对这些箱子进行p次操作,每次操作分别为以下两种之一:

输入 M x y:表示将编号为x的箱子所在的栈放在编号为y的箱子所在栈的栈顶.

输入 C x:计算编号为x的所表示的栈中在x号箱子下面的箱子数目.

 

思路:

move a,b的时候(合并的时候),b其中一个作为子树,dist[fb],距离根节点的距离为size[fa],然后size[fa]+=size[fb];

count c的时候,就是size[fa[c]]-dist[c]-1啦。

注意的是:Find_set的时候,要将dist处理好啦,(还是在同一个树中)

if(x!=father[x])

int t=father[x];

father[x]=Find_set[father[x]];

dist[x]+=dist[t];

 

#include 
#include
#include
#include
#include
using namespace std;const int maxn = 30000+10;int father[maxn];int size[maxn]; ///表示团的大小int dist[maxn]; ///到根节点的距离int Find_set(int x){ if(x!=father[x]) { int t=father[x]; father[x] = Find_set(father[x]); dist[x]+=dist[t]; } return father[x];}void Union(int x,int y){ father[y] = x; dist[y] = size[x]; size[x] +=size[y];}int main(){ for(int i=0;i

 

转载于:https://www.cnblogs.com/TreeDream/p/5612891.html

你可能感兴趣的文章
武汉电博会看点 daydao电商云ERP亮相
查看>>
浪潮李辉:SDS,承载应用和技术两极蔓延式创新
查看>>
机会与危险并存 存储业希望依旧
查看>>
GE以9.15亿美元收购ServiceMax 以完善工业互联网平台
查看>>
Windows Shellcode学习笔记——通过VirtualProtect绕过DEP
查看>>
Apache httpd 出现多个漏洞 可能引发DoS攻击 2.2.x及2.4.x版本受影响
查看>>
ARM计划将四核心CPU引入磁盘驱动器
查看>>
智慧城市数量年内超500个 这两大难题不得不解
查看>>
《中国人工智能学会通讯》——10.27 提出的方法
查看>>
大数据重点不在于“大”
查看>>
普元发布Primeton DI 6.1.0送新鲜:为用户终极体验而战
查看>>
解读固态磁盘性能发展之现状
查看>>
CFO职能扩张 CIO将面临更大数据压力
查看>>
区块链之路该怎么走?
查看>>
12款白帽子用于黑客渗透测试的操作系统
查看>>
博科助力澳大利亚的基因组研究机构应对大数据增长
查看>>
DDoS再度来袭 德国网络沦陷的原因是?
查看>>
传统销售移动办公初体验:兵行千里高效掌握
查看>>
智能家庭本周锋闻:家电联网路漫漫
查看>>
聊聊Java的泛型及实现
查看>>