HDU 2818 Building Block
2016-07-26 23:15
375 查看
Building Block
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 105 Accepted Submission(s) : 43Font: Times New Roman | Verdana | Georgia
Font Size: ← →
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<iostream> #include<cmath> #include<cstring> #include<climits> #include<string> #include<queue> #include<stack> #include<algorithm> using namespace std; const int M=30005; int pre[M]; int num[M]; int under[M]; int i,j,n,m,k; void init() { for(i=0;i<M;i++) { pre[i]=i; num[i]=1; under[i]=0; } } int f(int x) { int t; if(x!=pre[x]) { t=f(pre[x]); under[x]+=under[pre[x]]; pre[x]=t; } return pre[x]; } void merge_(int x,int y) { int fx=f(x),fy=f(y); if(fx!=fy) { under[fx]=num[fy]; num[fy]+=num[fx]; pre[fx]=fy; } } int main() { int t;char str; cin>>t; init(); while(t--) { cin>>str; if(str=='M') { int a,b; cin>>a>>b; merge_(a,b); } else { int c; cin>>c; f(c); cout<<under[c]<<endl; } } return 0; }
相关文章推荐
- 动态规划之前缀动态规划:poj 1458 Common Subsequence(最长公共子序列)
- [置顶] Android DocumentUi(下载管理)是如何向DownloadProvider中获取数据的
- hdu 3989 HP and Polyjuice Potion & hdu 4626 Jinkeloid
- UI基础_自定义非等高Cell_Xib封装_版本_有GIF_源代码
- UISlider无法拖动进度条的问题解决
- UI基础_自定义非等高Cell_storyboard封装_版本_有GIF_源代码
- UEFI引导在GPT分区下安装win2008——抓住那只傲娇的win2008
- Codeforces 612C Replace To Make Regular Bracket Sequence【栈】
- easyui源码分析(parser.js)(3)
- Confluent介绍(二)--confluent platform quickstart
- lintcode unique-paths-ii 不同的路径ii
- HDOJ 1242 Rescue(BFS + 优先队列)
- UE4 启动器一系列问题处理链接
- stored property "text" without initial value prevents synthesized initializers
- 循环 语句 break的用法 continue的用法
- Hibernate之Query接口的uniqueResult()方法
- Android Studio 出现building "project name" gradle project info问题
- java基础——String和StringBuffe、StringBuilder
- easyui 源码分析(easyloader.js)(2)
- Elasticsearch(入门篇)——Query DSL与查询行为