Building Block HDU - 2818 (并查集)

Posted yijiull

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Building Block HDU - 2818 (并查集)相关的知识,希望对你有一定的参考价值。

Building Block

HDU - 2818

题意:搬砖。。。每一次可以把a所在的那一堆放到b所在的那一堆上面,问第x号砖下面有几块砖。

记录一下到根节点的距离(dw),以及根节点上方有几块砖(up)。

技术分享
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int maxn=30010;
 5 int f[maxn],up[maxn],dw[maxn];
 6 
 7 int gf(int x){
 8     if(x==f[x]){
 9         return x;
10     }
11     int r=f[x];
12     f[x]=gf(r);
13     dw[x]+=dw[r];
14     return f[x];
15 }
16 
17 int n;
18 int main(){
19    // freopen("in.txt","r",stdin);
20     while(scanf("%d",&n)!=EOF){
21         int ans=0;
22         for(int i=0;i<maxn;i++) {f[i]=i;up[i]=1;dw[i]=0;}
23         for(int i=0;i<n;i++){
24             int a,b;
25             char c;
26             getchar();
27             scanf("%c",&c);
28             if(c==M){
29                 scanf("%d%d",&a,&b);
30                 int pa=gf(a),pb=gf(b);
31                 if(pa!=pb){
32                     f[pa]=pb;
33                     dw[pa]+=up[pb];
34                     up[pb]+=up[pa];
35                 }
36             }else{
37                 scanf("%d",&a);
38                 gf(a);
39                 printf("%d\n",dw[a]);
40             }
41         }
42     }
43     return 0;
44 }
View Code

 

以上是关于Building Block HDU - 2818 (并查集)的主要内容,如果未能解决你的问题,请参考以下文章

Building Block HDU - 2818 (并查集)

POJ——T 1988 Cube Stacking || HDU ——T 2818 Building Block

[HDOJ2818]Building Block(带权并查集,路径压缩)

(hdu 6024) Building Shops

HDU 5538 House Building(模拟——思维)

HDU 5033---Building(单调栈)