[Baltic2013]ballmachine BZOJ3133
分析:
我们考虑,因为每次放置的时候,都是向子树中含有的编号最小的哪一个走,那么放置的顺序是固定的,我们将边以to的子树最小排序,之后得到的出栈序就是球的放入顺序。目测可以使用堆来实现,线段树也能实现,链表和并查集不能实现。
每次放球可以暴力的放入,因为满足实际不可以放入超过n个球。
每次取走的球可以通过倍增来找到,因为满足球是连续的。
附上代码:
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
using namespace std;
#define N 100005
priority_queue<int>q;
int a[N],head[N],cnt,fa[21][N],dep[N],used[N],n,Q,vis[N],minn[N];
bool cmp(int x,int y)
{
return minn[x]<minn[y];
}
vector<int> e[N];
void dfs(int x,int from)
{
fa[0][x]=from,dep[x]=dep[from]+1;minn[x]=x;
int t=e[x].size();
for(int i=0;i<t;i++)
{
int to1=e[x][i];
if(to1!=from)
{
dfs(to1,x);
minn[x]=min(minn[x],minn[to1]);
}
}
}
int num,ans,idx[N],p[N],tims;
int get(int x)
{
int ans=0;
for(int i=19;i>=0;i--)
{
if(used[fa[i][x]])
{
ans+=(1<<i);
x=fa[i][x];
}
}
used[x]=0;
q.push(-idx[x]);
return ans;
}
void dfs1(int x,int from)
{
int t=e[x].size();
for(int i=0;i<t;i++)
{
int to1=e[x][i];
if(to1!=from)
{
dfs1(to1,x);
}
}
idx[x]=++tims;p[tims]=x;
}
int rot=0;
int main()
{
// freopen("ball.in","r",stdin);
// freopen("ball.out","w",stdout);
scanf("%d%d",&n,&Q);
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
if(!x)rot=i;
else e[x].push_back(i);
q.push(-i);
}
dfs(rot,0);
for(int i=1;i<=19;i++)
{
for(int j=1;j<=n;j++)
{
fa[i][j]=fa[i-1][fa[i-1][j]];
}
}
for(int i=1;i<=n;i++)
{
if(e[i].begin()==e[i].end())continue;
sort(e[i].begin(),e[i].end(),cmp);
}
dfs1(rot,0);
while(Q--)
{
int x,y;
scanf("%d%d",&x,&y);
if(x==1)
{
int z;
while(y--)
{
z=p[-q.top()];q.pop();
used[z]=1;
}
printf("%d\n",z);
}else
{
printf("%d\n",get(y));
}
}
}
[Baltic2013]ballmachine BZOJ3133的更多相关文章
- [BZOJ3133] [Baltic2013]ballmachine(树上倍增+堆)
[BZOJ3133] [Baltic2013]ballmachine(树上倍增+堆) 题面 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树滚下.如果 ...
- 【BZOJ 3133】 3133: [Baltic2013]ballmachine (线段树+倍增)
3133: [Baltic2013]ballmachine Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 148 Solved: 66 Descri ...
- BZOJ3133[Baltic2013]ballmachine
题目描述 https://www.lydsy.com/JudgeOnline/problem.php?id=3133 题解 还是分两个操作来说吧. 先看第一个操作,放球,可以发现,对于祖先节点和后代节 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ3133[ballmachine]——倍增+优先队列
题目描述 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树滚下.如果同时有多个点可以走,那么会选择编号最小的节点所在路径的方向.比如依次在树根4放2个 ...
- 【BZOJ 3136】 3136: [Baltic2013]brunhilda (数论?)
3136: [Baltic2013]brunhilda Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 238 Solved: 73[Submit][ ...
- BZOJ_3133_[Baltic2013]ballmachine_堆+倍增
BZOJ_3133_[Baltic2013]ballmachine_堆+倍增 Description 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树 ...
- bzoj3135: [Baltic2013]pipesd
Description 有n个水库,m条管道.Jester会在某些管道中间凿开一个洞,让水流出来或者用水泵把水打进去.保证这个流速是偶数.对于一条管道(u, v),如果在中间凿开了一个洞让水流出来,流 ...
- bzoj3137: [Baltic2013]tracks
炸一看好像很神仙的样子,其实就是个sb题 万年不见的1A 但是我们可以反过来想,先选一个起点到终点的联通块,然后这联通块后面相当于就能够走了,继续找联通块 然后就能发现直接相邻的脚步相同的边权为0,否 ...
随机推荐
- MySql循环语句
drop procedure if exists test_insert; DELIMITER ;; CREATE PROCEDURE test_insert () BEGIN DECLARE i I ...
- 本地chrome调试服务器node
Node内置了V8引擎提供的 inspector 调试器,可以通过 TCP 协议从外部访问这个调试器,方便对Node程序进行调试.启动调试的标志有: Flag Meaning --inspect En ...
- vue Element-UI 分页使用(1)
最近在使用Element-UI这套框架配合Vue来写前端页面.在用Element-UI来制作表格的时候,遇到了一些小问题,记录方便学习. 其中两个事件是关于切换当前页和切换显示的列表条数的.另外的属性 ...
- OSGI企业应用开发(九)整合Spring和Mybatis框架(二)
上篇文章中,我们完成了在OSGI应用中整合Spring和Mybatis框架的准备工作,本节我们继续Spring和Mybatis框架的整合. 一.解决OSGI整合Spring中的Placeholder问 ...
- OSGI企业应用开发(八)整合Spring和Mybatis框架(一)
到目前为止,我们已经学习了如何使用Blueprint將Spring框架整合到OSGI应用中,并学习了Blueprint&Gemini Blueprint的一些使用细节.本篇文章开始,我们將My ...
- apktool逆向apk包
在AndroidStudio创建so一节里创建了so,并且在java里面调用so的HelloWorld方法,编译Android Studio后生成包app-debug.apk. 在逆向apk时如果该a ...
- [Sublime-Text] Linux下用Sublime-Text3编译输出Java文件
因为现在在借着经典的书籍巩固一些基础知识,所以会经常跑一些简单的程序,可又不想开庞大的IDE.所以就想试着用Sublime-Text来编译程序,哦,当然如果习惯的话,用 terminal 也可以.其实 ...
- windows下安装并启动hadoop2.7.2
64位windows安装hadoop没必要倒腾Cygwin,直接解压官网下载hadoop安装包到本地->最小化配置4个基本文件->执行1条启动命令->完事.一个前提是你的电脑上已经安 ...
- Python笔记(五):异常处理和数据存储
注:和上一篇有关联 (一) finally 和 输出异常信息 try: the_man = open(r'C:\Users\123456\Desktop\test.txt') ...
- go语言练习:sha256、sha512哈希算法
package main import ( "fmt" "crypto/sha256") func main() { str:="test hash. ...