带权并查集模板

#include<cstdio> #include<iostream> using namespace std; int f[30005],d[30005],s[30005]; int find(int x) { if(f[x]==x)return x; int tmp=find(f[x]); d[x]+=d[f[x]]; return f[x]=tmp; } void move(int x,int y) { int sx=find(x); int sy=find(y); if(sx==sy)return ; f[sx]=sy; d[sx]=s[sy]; s[sy]+=s[sx]; } void search(int x) { find(x); printf("%d\n",d[x]); } int main() { int q; scanf("%d",&q); for(int i=1;i<=30000;i++) { f[i]=i; d[i]=0; s[i]=1; } while(q--) { char pd; cin>>pd; if(pd=='M') { int x,y; scanf("%d%d",&x,&y); move(x,y); } else if(pd=='C') { int x; scanf("%d",&x); search(x); } } return 0; } 
全部评论

相关推荐

八极星:有什么不能问的,(/_\),这又不是多珍贵的机会,你有什么可失去的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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