HDU2818:Building Block
来源:互联网 发布:ping 域名ip 编辑:程序博客网 时间:2024/06/08 05:58
Problem Description
John are playing with blocks. There are N blocks (1 <= N <= 30000) numbered 1...N。Initially, there are N piles, and each pile contains one block. Then John do some operations P times (1 <= P <= 1000000). There are two kinds of operation:
M X Y : Put the whole pile containing block X up to the pile containing Y. If X and Y are in the same pile, just ignore this command.
C X : Count the number of blocks under block X
You are request to find out the output for each C operation.
M X Y : Put the whole pile containing block X up to the pile containing Y. If X and Y are in the same pile, just ignore this command.
C X : Count the number of blocks under block X
You are request to find out the output for each C operation.
Input
The first line contains integer P. Then P lines follow, each of which contain an operation describe above.
Output
Output the count for each C operations in one line.
Sample Input
6M 1 6C 1M 2 4M 2 6C 3C 4
Sample Output
102
#include <stdio.h>int pre[30005];int high[30005];//以该点为根节点的最大高度int low[30005];//在该集合中在该点下面的个数int find(int x){ if(pre[x] == x) return x; int z = find(pre[x]); low[x] = low[pre[x]]+low[x]; return pre[x] = z;}void set(){ int i; for(i = 0; i<30005; i++) { pre[i] = i; high[i] = 1; low[i] = 0; }}int main(){ int p; char c; scanf("%d%*c",&p); set(); while(p--) { int x,y; scanf("%c",&c); if(c == 'M') { scanf("%d%d%*c",&x,&y); int rx,ry; rx = find(x); ry = find(y); if(rx==ry) continue; pre[rx] = ry; low[rx] = high[ry]; high[ry] = high[rx] + high[ry]; } else if(c == 'C') { int k,i; scanf("%d%*c",&k); find(k); printf("%d\n",low[k]); } } return 0;}
- HDU2818:Building Block
- hdu2818 Building Block
- hdu2818 Building Block
- hdu2818 Building Block
- HDU2818 Building Block 并查集
- hdu2818
- Building Block
- hdu 2818 Building Block
- HDU 2818 Building Block
- hdu 2818 Building Block
- hdu 2818 Building Block
- HDU 2818 Building Block
- HDU 2818 Building Block
- hdu 2818 Building Block
- hdu 2818 Building Block
- HDU 2818 - Building Block
- hdu 2818 Building Block
- HDOJ 2818 Building Block
- 堆和栈的区别 (转贴)
- Android 开发环境搭建
- ArrayList和subList方法
- linux下跑CPU的命令 烤机
- 我的.emacs 23文件.备份用
- HDU2818:Building Block
- java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z
- keytool程序简介
- Spring security认证与授权(三)
- Java(HashCode应用和框架概念)
- poj 2778 AC自动机+矩阵乘法
- 项目管理知识笔记六:计算完工估算EAC
- ssh2项目中,使用HibernateDaoSupport异常:'sessionFactory' or 'hibernateTemplate' is required
- java 中jdbc的使用练习-错误 mysql access denied for user odbc @localhost