标签:des style color os strong io for art
Time Limit: 2000MS | Memory Limit: 30000K | |
Total Submissions: 18820 | Accepted: 6530 | |
Case Time Limit: 1000MS |
Description
Input
Output
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 <cstring> using namespace std; const int maxn=100005; int set[maxn];//set[k]为k所在栈的最底层元素 int cnt[maxn];//cnt[k]为k...set[k]的元素个数 int top[maxn];//top[k]为k所在栈的顶层元素 int main() { int set_find(int x); void set_join(int x,int y); int p;//操作的次数 cin>>p; ///////初始化///////////// memset(set,-1,sizeof(set)); memset(cnt,0,sizeof(cnt)); int i; for(i=0;i<maxn;i++) top[i]=i;//初始化top[],所有栈的栈顶元素为这个元素本身 while(p--)//控制输入次数 { char s;//操作控制字母 cin>>s; if(s=='M') { int x,y; cin>>x>>y; set_join(x,y);//将包含元素x的元素移到包含元素y的栈顶 } if(s=='C') { int x;//要求计算以x为栈顶元素的元素个数 cin>>x; set_find(x);//计算包含x的栈中在x下的元素个数 cout<<cnt[x]<<endl; } } return 0; } //////////计算包含x的栈中在x下的元素个数//////// int set_find(int x) { if(set[x]<0) //x下面没有其他元素 return x; if(set[set[x]]>=0)//若set[x]下面还有元素,则调整x所在栈最下面的元素 { int fa=set[x];//设fa为p的栈底元素 set[x]=set_find(set[x]);//若set[x]下面还有元素,则调整x的栈底元素 cnt[x]=cnt[fa]+cnt[x];//累加从fa到set[x]的的元素个数 } return set[x]; } /////////将x所在的栈移到y所在栈的栈顶//////////// void set_join(int x,int y) { x=set_find(x);//x为x所在栈的栈底元素 y=set_find(y);//y为y所在栈的栈底元素 set[x]=y;//将x栈移到y的栈顶,更新x的栈底元素 set_find(top[y]);//刷新y所在栈原先的栈顶元素到y之间的元素个数 cnt[x]=cnt[top[y]]+1; top[y]=top[x];//更新y的栈顶元素为x的栈顶元素 }
POJ 1988 Cube Stacking,布布扣,bubuko.com
标签:des style color os strong io for art
原文地址:http://blog.csdn.net/sunshumin/article/details/38276427