【POJ-1988】Cube Stacking(并查集)
2014-10-30 16:42
246 查看
//===================================== // KinderRiven POJ 1899 //===================================== #include<cstdio> #include<cstring> using namespace std; const int maxn = 33333; const int INF = 30000; int fa[maxn]; //父亲结点的编号 int ret[maxn]; //压在i下面有几个木块 int size[maxn]; //以结点i为底的栈中元素的个数,如果i不是根,那么size[i] = 0; void init(){ for(int i = 1; i <= INF; i++){ fa[i] = i; ret[i] = 0; size[i] = 1;} } int find_father(int u){ if(fa[u] != u){ int temp = fa[u]; fa[u] = find_father(fa[u]); if(size[u]){ //size[i]不为0说明该元素为栈底的元素 ret[u] += size[temp]; size[temp] += size[u]; size[u] = 0; } else //否则的话这个元素就是一个普通的元素 ret[u] += ret[temp]; } return fa[u]; } void union_set(int p,int q){ int fp = find_father(p); int fq = find_father(q); fa[fp] = fq; find_father(p); find_father(q); return; } int main(){ int n; init(); scanf("%d",&n); while(n--){ char op[10]; scanf("%s",op); if(op[0] == 'M'){ int x,y; scanf("%d%d",&x,&y); union_set(x,y); } else{ int x; scanf("%d",&x); find_father(x); printf("%d\n",ret[x]); } } return 0; }
相关文章推荐
- POJ 1988 Cube Stacking 并查集 + 权值(隐含)
- POJ 1988 Cube Stacking(带权的并查集)
- 【POJ 1988】 Cube Stacking (带权并查集)
- POJ 1988 Cube Stacking【并查集的简单应用 堆木块】
- poj 1988(并查集)Cube Stacking
- poj-1988 Cube Stacking 带权并查集
- [POJ 1988]Cube Stacking[带权并查集]
- poj 1988 Cube Stacking 并查集
- POJ - 1988 Cube Stacking(带权并查集)
- POJ 1988 Cube Stacking(带权并查集)
- poj 1988 Cube Stacking(带权并查集)
- 【POJ1988】Cube Stacking(并查集)
- POJ 1988 Cube Stacking (并查集)
- HDU 2818 Building Block, poj 1988 Cube Stacking(带权并查集)
- poj 1988 Cube Stacking(并查集)
- poj 1988 Cube Stacking(数据结构:带权并查集)
- poj 1988 Cube Stacking(带权并查集)
- POJ 1988 Cube Stacking (带权并查集)
- poj 1988 Cube Stacking 带权并查集
- POJ 1988 Cube Stacking(带权并查集)