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,但是今天发现并查集也可以解决,为了方便我自己理解大神的模板,便尝试解这道题目,没想到过了... # ...
随机推荐
- CSV模块
Python csv模块的使用 1.csv简介 CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本 格式,用以存储表格数 ...
- Nginx反向代理新篇-使用location对多个URL做反向代理
1.原理 Nginx解析location/后面的字符串,配置不同的字符串匹配不同的URL进行反向代理. 2.nginx.conf配置文件 worker_processes 1; events { wo ...
- (5)ASP.NET Core 中的静态文件
1.前言 当我们创建Core项目的时候,Web根目录下会有个wwwroot文件目录,wwwroot文件目录里面默认有HTML.CSS.IMG.JavaScript等文件,而这些文件都是Core提供给客 ...
- javaWeb_Request对象
首先说一下Http协议 一.Http协议的概念及作用 1.什么是HTTP协议? (HTTP,HyperText Transfer Protocol)超文本传输协议, 是互联网上应用最为广泛的一种网络协 ...
- SystemTap 静态探针安装包
yum install systemtap-sdt-devel
- IIS Express 的怪毛病 vs2013本机调试
本机调试时,如果同一个项目有多个版本,同时debug,可能会串项目调试,造成不必要的困扰: 通常情况下是 IIS express的映射出现了问题: 解决方案: 1.打开目录:查看文件C:\Users\ ...
- 【paddle学习】词向量
http://spaces.ac.cn/archives/4122/ 关于词向量讲的很好 上边的形式表明,这是一个以2x6的one hot矩阵的为输入.中间层节点数为3的全连接神经网络层,但你看右 ...
- docker下用keepalived+Haproxy实现高可用负载均衡集群
启动keepalived后宿主机无法ping通用keepalived,报错: [root@localhost ~]# ping 172.18.0.15 PING () bytes of data. F ...
- font-family,font-size,color
CreateTime--2017年12月20日16:43:35 Author:Marydon css设置字体样式 1.font-family 语法:属性值可以有一个或多个,多个值之间使用逗号隔开. ...
- 获取DOM父元素和子元素
利用javascript可以遍历DOM树,这篇文章介绍用获取一个DOM元素的所有父节点和获取一个DOM元素的所以子孙节点. 1.获取所有父节点.用递归的方法,用parentNode属性. <!D ...