码迷,mamicode.com
首页 > 其他好文 > 详细

poj 1988 并查集(终于看懂一个了/(ㄒoㄒ)/~~)

时间:2015-05-06 10:53:24      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

题意:有几个stack,初始里面有一个cube。支持两种操作:1.move x y: 将x所在的stack移动到y所在stack的顶部。2.count x:数在x所在stack中,在x之下的cube的个数。

链接:点我

 1 /*
 2 POJ 1988
 3 */
 4 #include <stdio.h>
 5 #include <iostream>
 6 #include <algorithm>
 7 #include <string.h>
 8 using namespace std;
 9 const int MAXN=30010;
10 int F[MAXN];
11 int num[MAXN];//堆的数目
12 int val[MAXN];//下面的个数
13 int find(int x)
14 {
15     if(F[x]==-1)return x;
16     int tmp=find(F[x]);
17     val[x]+=val[F[x]];
18     return F[x]=tmp;
19 }
20 void bing(int u,int v)//将u所在的堆放在v上面,注意顺序
21 {
22     int t1=find(u),t2=find(v);
23     if(t1!=t2)
24     {
25         F[t1]=t2;
26         val[t1]=num[t2];
27         num[t2]+=num[t1];
28     }
29 }
30 int main()
31 {
32     int P;
33     int u,v;
34     char op[10];
35     while(scanf("%d",&P)==1)
36     {
37         for(int i=0;i<MAXN;i++)
38         {
39             F[i]=-1;
40             val[i]=0;
41             num[i]=1;
42         }
43         while(P--)
44         {
45             scanf("%s",&op);
46             if(op[0]==C)
47             {
48                 scanf("%d",&u);
49                 find(u);
50                 printf("%d\n",val[u]);
51             }
52             else
53             {
54                 scanf("%d%d",&u,&v);
55                 bing(u,v);
56             }
57         }
58     }
59     return 0;
60 }

 

poj 1988 并查集(终于看懂一个了/(ㄒoㄒ)/~~)

标签:

原文地址:http://www.cnblogs.com/cnblogs321114287/p/4480993.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!