您的位置:首页 > 运维架构

【BZOJ 3376】[Usaco2004 Open]Cube Stacking 方块游戏 带权并查集

2017-09-20 12:24 555 查看
这道题一开始以为是平衡树结果发现复杂度过不去,然后发现我们一直合并而且只是记录到最低的距离,那么就是带权并查集了,带权并查集的权一般是到根的距离,因为不算根要好打,不过还有一些其他的,具体的具体打。

#include <cstdio>
#include <cstring>
const int N=30050;
int h
,f
,size
;
char s[2];
inline int find(int x){
if(f[x]==x)return x;
int temp=f[x];f[x]=find(f[x]);
if(temp!=f[x])h[x]+=h[temp];
return f[x];
}
inline void Unit(int x,int y){
h[find(x)]=size[find(y)];
size[find(y)]+=size[find(x)];
f[find(x)]=find(y);
}
int main(){
int T,x,y;scanf("%d",&T);
for(int i=0;i<N;i++)f[i]=i,size[i]=1,h[i]=0;
while(T--){
scanf("%s",s);
if(s[0]=='M')scanf("%d%d",&x,&y),Unit(x,y);
else scanf("%d",&x),find(x),printf("%d\n",h[x]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: