POJ1988 Cube Stacking(并查集)
来源:互联网 发布:比赛赛程安排软件 编辑:程序博客网 时间:2024/04/29 15:36
题目:
Cube Stacking
Time Limit: 2000MS Memory Limit: 30000KTotal Submissions: 24296 Accepted: 8517Case 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
Source
USACO 2004 U S Open
[Submit] [Go Back] [Status] [Discuss]
代码:#include <stdio.h>#include <string.h>#include <stack>#include <queue>#include <algorithm>#define mem(a,b) memset(a,b,sizeof(a))#define shu 20using namespace std;int n,fa[shu],r[shu],mx[shu];//r[x]表示x到根节点的距离,mx[x]表示集合中有多少个盒子void init(){ int i; for(i=1; i<shu; i++) { fa[i]=i; r[i]=0; mx[i]=1; }}int find(int x)//查找并查集祖先{ int fx=fa[x]; if(fa[x]!=x) { fx=find(fa[x]); r[x]+=r[fa[x]]; } return fa[x]=fx;}void u(int x,int y)//将两个集合合并{ int fx=find(x); int fy=find(y); fa[fy]=fx; r[fy]+=mx[fx];//合并时更改相应的值 mx[fx]+=mx[fy];}int main(){ char op[3]; int i,j; while(~scanf("%d",&n)) { init(); while(n--) { scanf("%s",op); if(op[0]=='C') { scanf("%d",&i); int f=find(i); printf("%d\n",mx[f]-r[i]-1);//该集合盒子个数减去在i盒子之上的个数 } else { scanf("%d%d",&i,&j); u(i,j); } } } return 0;}
x所在集合的元素个数 - 在它上面的个数 - 它本身 就是在它之下的个数
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 带权并查集
- POJ1988-Cube Stacking(带权并查集)
- Cube Stacking POJ1988 【并查集的应用】
- poj1988 Cube Stacking(关系并查集)
- POJ1988 Cube Stacking(并查集的应用)
- bzoj3376/poj1988[Usaco2004 Open]Cube Stacking 方块游戏 — 带权并查集
- Cube Stacking -- 并查集
- POJ1988 Cube Stacking
- POJ1988 Cube Stacking
- 构建和运行您的应用Instant Run
- 第3章后台执行命令
- 好友精品文章推荐
- Leap Motion开发环境搭建及简单样例
- 锋利的jQuery
- POJ1988 Cube Stacking(并查集)
- Django的SAE部署
- 优化 SQL 查询
- (九)模板方法模式详解(包含与类加载器不得不说的故事)
- 关键字的作用
- gedit打开文件出错
- C 堆和栈的区别
- Problem-2053 Switch Game
- 如何打造 茄子快传 这样一款文件传输应用