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,但是今天发现并查集也可以解决,为了方便我自己理解大神的模板,便尝试解这道题目,没想到过了... # ...
随机推荐
- cmd指令
d: 进入D盘: cd job 进入d盘名为job的文件夹:cd显示当前路径: md test创建名为test的文件夹: rd test删除名为test的文件夹: cd.>test.json创 ...
- DOM对象之查找标签&属性操作
HTML DOM (文档对象模型) DOM(Document Object Model)是一套对文档的内容进行抽象和概念化的方法. JavaScript对DOM进行了实现,对应于JavaScript中 ...
- WebView跳转到底部
webview中有个computeVerticalScrollRange方法,是protected的,可以用反射,也可以自己写一个view继承webview,实现computeVerticalScro ...
- 模拟用户登录-SpringMVC+Spring+Mybatis整合小案例
1. 导入相关jar包 ant-1.9.6.jarant-launcher-1.9.6.jaraopalliance.jarasm-5.1.jarasm-5.2.jaraspectj-weaver.j ...
- js判断手机的横竖屏调整样式
在移动端,我们经常遇到横竖屏的问题,所以我们改如何判断或针对横竖屏来写代码呢.首先需要在head中加入如下代码: <meta name="viewport" content= ...
- seo优化入门教程:影响关键词排名的因素
很多人都说网站优化,但是怎么个优化法?优化什么东西?很多人都不知道.虽然我们优化的是我们的网站,但是提升的却是我们的关键词排名. 我们不管去优化哪一个网站,得到的搜索结果,他都会去触发关键词排名的因素 ...
- delphi 与 sqlite3
delphi与sqlite file:0 前言 本文的目的在于采用流水账方式来记录学习delphi访问嵌入式数据库sqlite中的一些点滴.欢迎各位同好共同学习和批评指正. file:1 准备工作 ...
- 【Mybatis】 Mybatis在xml文件中处理大于号小于号的方法【问题】
处理大于小于号的方法: https://www.cnblogs.com/winner-0715/p/6132755.html 第一种方法:用转义字符把">"和"&l ...
- 【hql】spring data jpa中 @Query使用hql查询 问题
spring data jpa中 @Query使用hql查询 问题 使用hql查询, 1.from后面跟的是实体类 不是数据表名 2.字段应该用实体类中的字段 而不是数据表中的属性 实体如下 hql使 ...
- 校园网、教育网 如何纯粹访问 IPv6 网站避免收费
我国校园网有可靠的 IPv6 网络环境,速度非常快.稳定,并且大多数高校在网络流量计费时不会限制 IPv6 的流量,也就是免费的.然而访问 IPv4 商业网络时,则会收费,并且连接的可靠性一般.可幸的 ...