SPOJ:Stack Overflow(并查集)
Stack is a basic data structure. Where 3 operation can be done-
Push: You can push object to the stack
Pop: You can pop the object to the stack
Top: You can check the value of the top object.
For further details you can get idea here ( if you really don’t know ) :https://en.wikibooks.org/wiki/Data_Structures/Stacks_and_Queues
Now we have a problem here, there are N stack in front of you. they are numbered from 1 to N. Each of them are initially empty. Now you will have Q operations. Each operation can be one the below 4 types:
push i x, Push a value of x to stack numbered i
pop i, Pop value from the stack numbered i, if stack is empty discard the operation
put i j, Put the j’th stack on top of the i’th stack. So there will be no element left on the j’th stack.
top i, Print the value of the top element of ith stack. If stack is empty print “Empty!”
Check the Sample IO for further understanding…
Input:
Input starts with an integer T (≤5), denoting the number of test cases.
The first line of a case is a blank line. The next line contains two integers N (1 ≤ N ≤ 104), Q(1 ≤ Q ≤ 5*104).
The next Q lines will contain a operation like above mentioned.
(1≤ I, j ≤ N), (1≤ x ≤ 105)
Output
For each test case, print the case number in a single line. Then for each 4th type operation you should print the value or “Empty!” if the stack is empty.
|
Input |
Output |
|
1 3 18 push 1 1 push 2 2 push 3 3 push 3 4 top 1 top 2 top 3 put 1 3 pop 2 top 1 top 2 top 3 pop 1 top 1 pop 1 top 1 pop 1 top 1 |
Case 1: 1 2 4 4 Empty! Empty! 3 1 Empty! |
Judge data is huge so use faster IO like scanf/printf
题意:模拟栈的操作。
思路:本来是水题一道,但是主要很细节,所以还是放这里,方便提醒自己注意细节。
push元素的时候更新栈首begin和栈定Laxt。
pop的时候如果空了,注意更新Begin=0;
put x到y的时候如果x为空或者x==y的时候不不操作。
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int Laxt[maxn],Begin[maxn],fa[maxn],cnt,num[maxn];
char c[];
int main()
{
int T,N,Q,Case=,x,i,j;
scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&Q);
printf("Case %d:\n",++Case);
memset(Laxt,,sizeof(Laxt));
memset(Begin,,sizeof(Begin));
memset(fa,,sizeof(fa)); cnt=;
while(Q--){
scanf("%s",c);
if(c[]=='s'){ //push
scanf("%d%d",&i,&x);
num[++cnt]=x;
if(!Begin[i]) Begin[i]=cnt;
fa[cnt]=Laxt[i];
Laxt[i]=cnt;
}
else if(c[]=='t'){ //put
scanf("%d%d",&i,&j);
if(i!=j&&Laxt[j]){
fa[Begin[j]]=Laxt[i];
Laxt[i]=Laxt[j];
if(!Begin[i]) Begin[i]=Begin[j];
Laxt[j]=Begin[j]=;
}
}
else if(c[]=='p'){ // pop
scanf("%d",&i);
if(Laxt[i]) Laxt[i]=fa[Laxt[i]];
if(!Laxt[i]) Begin[i]=;
}
else { //top
scanf("%d",&i);
if(!Laxt[i]) printf("Empty!\n");
else printf("%d\n",num[Laxt[i]]);
}
}
}
return ;
}
SPOJ:Stack Overflow(并查集)的更多相关文章
- SPOJ IAPCR2F 【并查集】
思路: 利用并查集/DFS都可以处理连通问题. PS:注意Find()查找值和pre[]值的区别. #include<bits/stdc++.h> using namespace std; ...
- SPOJ GSS4 Can you answer these queries IV ——树状数组 并查集
[题目分析] 区间开方+区间求和. 由于区间开方次数较少,直接并查集维护下一个不是1的数的位置,然后暴力修改,树状数组求和即可. 这不是BZOJ上上帝造题7分钟嘛 [代码] #include < ...
- SPOJ:Lexicographically Smallest(并查集&排序)
Taplu and Abhishar loved playing scrabble. One day they thought of inventing a new game using alphab ...
- SPOJ:Lost and survived(multiset+并查集)
On September 22, 2004, Oceanic Flight 815 crashed on a mysterious island somewhere in the pacific. T ...
- SPOJ LEXSTR 并查集
题目描述: Taplu and Abhishar loved playing scrabble. One day they thought of inventing a new game using ...
- “玲珑杯”ACM比赛 Round #7 B -- Capture(并查集+优先队列)
题意:初始时有个首都1,有n个操作 +V表示有一个新的城市连接到了V号城市 -V表示V号城市断开了连接,同时V的子城市也会断开连接 每次输出在每次操作后到首都1距离最远的城市编号,多个距离相同输出编号 ...
- hdu 5652 India and China Origins 并查集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5652 题目大意:n*m的矩阵上,0为平原,1为山.q个询问,第i个询问给定坐标xi,yi,表示i年后这 ...
- HDU 2545 树上战争 (并查集+YY)
题意:给一棵树,如果树上的某个节点被某个人占据,则它的所有儿子都被占据,lxh和pfz初始时分别站在两个节点上,lxh总是先移动 ,谁当前所在的点被另一个人占据,他就输了比赛,问谁能获胜 比较有意思的 ...
- ACM: FZU 2112 Tickets - 欧拉回路 - 并查集
FZU 2112 Tickets Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u P ...
- UVA 572 油田连通块-并查集解决
题意:8个方向如果能够连成一块就算是一个连通块,求一共有几个连通块. 分析:网上的题解一般都是dfs,但是今天发现并查集也可以解决,为了方便我自己理解大神的模板,便尝试解这道题目,没想到过了... # ...
随机推荐
- python3.6安装遇到的问题
Ubuntu16.04版本最新的Python 3.x版本3.5 . 可以从源代码执行安装最新稳定版本3.6. 要安装Python 3.6 ,请运行以下命令: # wget https://www.py ...
- PAT (Advanced Level) 1086. Tree Traversals Again (25)
入栈顺序为先序遍历,出栈顺序为中序遍历. #include<cstdio> #include<cstring> #include<cmath> #include&l ...
- codevs——1297 硬币
1297 硬币 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 我们知道即使是同一种面值的硬币,它们的重量也 ...
- easyui分页时,总页数出错
错误出现 MyBatis用easyui写后台分页代码时,出现翻页后显示总页数错误 代码如下 可能原因在于后台mappers.xml里的sql语句错误 <select id="getPr ...
- systemtap notes
systemtap notes -- 10 June 2014 1 Systemtap systemtap是红帽开发的一款分析工具,如果你需要使用的话,最好在redhat的系统上,在 Ubuntu上兼 ...
- Visual Studio VS2013模块对于SAFESEH 映像是不安全的 怎么办
打开该项目的"属性页"对话框,会出现如下界面打开该项目的"属性页"对话框,会出现如下界面 然后单击"链接器"--"命令行&qu ...
- CMS - tabBar
Tips:如果网页图片(文字)看不清,请按CTRL+鼠标滚轮 1.建议使用阿里图库 或者 easyicon 2.建议使用81*81且低于40KB的图片(建议jpg) 3.如需查看脑图结构,请点击:ta ...
- spring MVC使用Interceptor做用户登录判断
在任何一个项目中,我们必须要用到的就是用户登录,那么就少不了用户是否登录的判断,如果我们每一个请求都要去做一次判断,那么就会变得很麻烦,但我们复制粘贴的时候我们就要考虑我们的代码写的是不是有问题,是不 ...
- TestNG demo
下载TestNG的归档文件 下载最新版本的TestNG的jar文件,详细请点击访问 http://www.testng.org..在写这篇教程的时候,我下载TestNG中-6.8.jar,并将 tes ...
- 【读后感】Netty 系列之 Netty 高性能之道 - 相比 Mina 怎样 ?
[读后感]Netty 系列之 Netty 高性能之道 - 相比 Mina 怎样 ? 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商 ...