HDOJ 2818 Building Block
2015-12-18 13:26
501 查看
Building Block
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4222 Accepted Submission(s): 1316
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.
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
6 M 1 6 C 1 M 2 4 M 2 6 C 3 C 4
Sample Output
1 0 2
#include <cstdio> #include <cstring> using namespace std; int father[30005]; int rank[30005]; int maxNum[30005]; int find(int x){ if (father[x] != x){ int fa = father[x]; father[x] = find(fa); rank[x] += rank[fa]; } return father[x]; } void Union(int x, int y){ int fx = find(x); int fy = find(y); if (fx != fy){ father[fx] = fy; rank[fx] += maxNum[fy] + 1; maxNum[fy] += maxNum[fx] + 1; } } int main(){ int t; int x, y, i; char c; while (scanf("%d%*c", &t) != EOF){ memset(rank, 0, sizeof(rank)); memset(maxNum, 0, sizeof(maxNum)); for (i = 0; i <= 30005; i++) father[i] = i; while (t--){ c = getchar(); if (c == 'M'){ scanf("%d%d%*c", &x, &y); Union(x, y); } else{ scanf("%d%*c", &x); find(x); printf("%d\n", rank[x]); } } } return 0; }
相关文章推荐
- Android Studio Experimental Gradle Plugin User Guide
- 用GUI写了一个登录验证(含时间加密)
- [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
- 307. Range Sum Query - Mutable
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
- how to query for a list<String> in jdbctemplate?--转载
- 使用driver.quit()的时候,有时会报错
- IOS UI篇—UILabel的文字顶部对齐
- uiautomator开发使用到第三方jar,出现class not found或者 BUILD FAILED的问题
- SharePoint : 使用SPQuery对象时要注意的事项
- Android 基础UI Demo小合集
- driver.close 和 driver.quit
- UGUI InputField获取输入焦点
- UITableView的自定义cell
- 28.Which two statements are true regarding constraints?
- requirejs+anjularjs+express框架
- UIAlertController的一些简单实用方法
- 【转】特殊权限控制之SUID、SGID、Sticky
- PowerBuild利用timing实现同时使用多个定时器
- SQL Server中字符串转化为GUID的标量函数实现