带权并查集模板2(银河英雄传说)

这道题有30000个列。。。

所以说带权并查集在原模板的基础上就必须再添一个num数组,num[i]表示i队列的长度

算是涨了见识了。。。

code:

#include<cstdio> #include<iostream> #include<cmath> using namespace std; int fa[30005],val[30005],num[30005]; int find(int x) { if(fa[x]!=x) { int t=fa[x]; fa[x]=find(fa[x]); val[x]+=val[t]; } return fa[x]; } int main() { int T; scanf("%d",&T); for(int i=1;i<=30000;i++) { fa[i]=i; num[i]=1; } char pd; int x,y; while(T--) { cin>>pd; scanf("%d%d",&x,&y); if(pd=='M') { int px=find(x); int py=find(y); if(px!=py) { fa[px]=py; val[px]+=num[py]; num[py]+=num[px]; num[px]=0; } //printf("qwq\n"); } else if(pd=='C') { int px=find(x); int py=find(y); if(px!=py) { printf("-1\n"); } else { int tmp; tmp=abs(val[y]-val[x]); printf("%d\n",tmp-1); } } } return 0; } 
全部评论

相关推荐

05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务