POJ1988-Cube Stacking(带权并查集)
来源:互联网 发布:python itemgetter 编辑:程序博客网 时间:2024/05/16 06:48
Cube Stacking
Time Limit: 2000MS Memory Limit: 30000KTotal Submissions: 18858 Accepted: 6547Case Time Limit: 1000MS
Description
Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)identical cubes labeled 1 through N. They start with N stacks, each containing a single cube. Farmer John asks Betsy to perform P (1<= P <= 100,000) operation. There are two types of operations:
moves and counts.
* In a move operation, Farmer John asks Bessie to move the stack containing cube X on top of the stack containing cube Y.
* In a count operation, Farmer John asks Bessie to count the number of cubes on the stack with cube X that are under the cube X and report that value.
Write a program that can verify the results of the game.
moves and counts.
* In a move operation, Farmer John asks Bessie to move the stack containing cube X on top of the stack containing cube Y.
* In a count operation, Farmer John asks Bessie to count the number of cubes on the stack with cube X that are under the cube X and report that value.
Write a program that can verify the results of the game.
Input
* Line 1: A single integer, P
* Lines 2..P+1: Each of these lines describes a legal operation. Line 2 describes the first operation, etc. Each line begins with a 'M' for a move operation or a 'C' for a count operation. For move operations, the line also contains two integers: X and Y.For count operations, the line also contains a single integer: X.
Note that the value for N does not appear in the input file. No move operation will request a move a stack onto itself.
* Lines 2..P+1: Each of these lines describes a legal operation. Line 2 describes the first operation, etc. Each line begins with a 'M' for a move operation or a 'C' for a count operation. For move operations, the line also contains two integers: X and Y.For count operations, the line also contains a single integer: X.
Note that the value for N does not appear in the input file. No move operation will request a move a stack onto itself.
Output
Print the output from each of the count operations in the same order as the input file.
Sample Input
6M 1 6C 1M 2 4M 2 6C 3C 4
Sample Output
102
题意:n个方块(n<=30000),p组操作(p<=100000),操作有两种,M a b 将含有a的堆放在包含b的堆上,还有一种是 C a统计a下面有多少个方块
思路:带权并查集,一堆中最顶上的方块作为父节点,用dist[X] 统计X到父亲节点的距离,rank[fa[X]]表示团的大小,两者相减即为答案
#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <string>#include <algorithm>#include <queue>using namespace std;const int maxn = 30000+10;int fa[maxn];int rank[maxn];int dist[maxn];void init(){ for(int i = 0; i < maxn; i++){ fa[i] = i; rank[i] = 1; dist[i] = 0; }}int find(int x){ if(x != fa[x]){ int t = fa[x]; fa[x] = find(fa[x]); dist[x] += dist[t]; } return fa[x];}int main(){ int n; while(~scanf("%d",&n)){ init(); char op; while(n--){ cin >> op; int a,b; if(op=='M'){ scanf("%d%d",&a,&b); int faA = find(a); int faB = find(b); if(faA != faB){ fa[faB] = faA; dist[faB] = rank[faA]; rank[faA] += rank[faB]; } }else{ scanf("%d",&a); int x = find(a); printf("%d\n",rank[x]-dist[a]-1); } } } return 0;}
0 0
- POJ1988-Cube Stacking(带权并查集)
- POJ1988 Cube Stacking 带权并查集
- POJ1988-Cube Stacking(带权并查集)
- POJ1988 Cube Stacking [并查集]
- POJ1988 - Cube Stacking - 并查集
- poj1988 Cube Stacking 并查集
- 【POJ1988】Cube Stacking(并查集)
- POJ1988 Cube Stacking(并查集)
- POJ1988 Cube Stacking(并查集)
- POJ1988:Cube Stacking(并查集)
- bzoj3376/poj1988[Usaco2004 Open]Cube Stacking 方块游戏 — 带权并查集
- 【北大夏令营笔记-并查集】poj1988-Cube Stacking
- Cube Stacking POJ1988 【并查集的应用】
- poj1988 Cube Stacking(关系并查集)
- POJ1988 Cube Stacking(并查集的应用)
- POJ-1988 Cube Stacking 带权并查集
- poj 1988 Cube Stacking(带权并查集)
- POJ 1988 Cube Stacking (带权并查集)
- linux之sort用法
- 控件CCtrlList随着对话框自适应缩放
- 最短路径算法ford
- ACdream OJ 1154 Lowbit Sum
- Objective-C语法之异常处理
- POJ1988-Cube Stacking(带权并查集)
- 增加mysql InnoDB的表空间
- 杭电1395 2^x mod n = 1
- Play create new application
- Android Otto框架浅析
- 黑马程序员_垃圾回收机制
- 1027. Colors in Mars (20)
- (转)hive sql 学习笔记
- 优先队列来处理的 最短路径