分析:

我们考虑,因为每次放置的时候,都是向子树中含有的编号最小的哪一个走,那么放置的顺序是固定的,我们将边以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的更多相关文章

  1. [BZOJ3133] [Baltic2013]ballmachine(树上倍增+堆)

    [BZOJ3133] [Baltic2013]ballmachine(树上倍增+堆) 题面 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树滚下.如果 ...

  2. 【BZOJ 3133】 3133: [Baltic2013]ballmachine (线段树+倍增)

    3133: [Baltic2013]ballmachine Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 148  Solved: 66 Descri ...

  3. BZOJ3133[Baltic2013]ballmachine

    题目描述 https://www.lydsy.com/JudgeOnline/problem.php?id=3133 题解 还是分两个操作来说吧. 先看第一个操作,放球,可以发现,对于祖先节点和后代节 ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. BZOJ3133[ballmachine]——倍增+优先队列

    题目描述 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树滚下.如果同时有多个点可以走,那么会选择编号最小的节点所在路径的方向.比如依次在树根4放2个 ...

  6. 【BZOJ 3136】 3136: [Baltic2013]brunhilda (数论?)

    3136: [Baltic2013]brunhilda Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 238  Solved: 73[Submit][ ...

  7. BZOJ_3133_[Baltic2013]ballmachine_堆+倍增

    BZOJ_3133_[Baltic2013]ballmachine_堆+倍增 Description 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树 ...

  8. bzoj3135: [Baltic2013]pipesd

    Description 有n个水库,m条管道.Jester会在某些管道中间凿开一个洞,让水流出来或者用水泵把水打进去.保证这个流速是偶数.对于一条管道(u, v),如果在中间凿开了一个洞让水流出来,流 ...

  9. bzoj3137: [Baltic2013]tracks

    炸一看好像很神仙的样子,其实就是个sb题 万年不见的1A 但是我们可以反过来想,先选一个起点到终点的联通块,然后这联通块后面相当于就能够走了,继续找联通块 然后就能发现直接相邻的脚步相同的边权为0,否 ...

随机推荐

  1. 网络基础 港湾FlexHammer5010交换机镜像端口配置

    港湾FlexHammer5010交换机镜像端口配置 by:授客 QQ:1033553122 1.登陆港湾交换机FlexHammer5010交换机 方法: telent 交换机ip 输入用户名 输入用户 ...

  2. 成为Java顶尖程序员,先过了下面问题!

    一.数据结构与算法基础 说一下几种常见的排序算法和分别的复杂度. 用Java写一个冒泡排序算法 描述一下链式存储结构. 如何遍历一棵二叉树? 倒排一个LinkedList. 用Java写一个递归遍历目 ...

  3. 70部MAYA灯光材质渲染教程合集

    MAYA灯光材质渲染教程合集 教程格式:MP4和flv 两种格式 使用版本:教程不是一年出的教程,各个版本都有 (教程软件为英文版) 清晰度:可以看清软件上的文字 语言:部分中文字幕,其他英文(通过看 ...

  4. Visual Studio Code配置Python环境

    安装环境python环境变量,这个就不写了,这类文章一抓一大把,这类就省略了······· 在Visal Studil Code中配置python环境,其实跟我的上一篇文章一样,如图: 这里有两个选择 ...

  5. Oracle EBS AR 收款取数

    -- 收款核销,贷项通知单核销也是通过ar_receivable_applications_all表 SELECT cr.receipt_number ,ad.amount_dr ,ad.amount ...

  6. net.exe use命令的使用

    net.exe use 查看当前的连接 net.exe use * /del /y 断开所有连接 net.exe use \\server\share "password" /us ...

  7. MVC 上传下载

    在Asp.net的WEBform中,上传文件与下载文件处理是很简单的事情,如果转为ASP.NET MVC呢?那就没有那么容易了,难少少,也不是很难,一起来看下本文吧.本文主要讲如何在Asp.net M ...

  8. SpringBoot_Mybatis_Maven_BootStrap

    ​​​ 需要eclipse 配置maven 未完,待续 链接:https://pan.baidu.com/s/1vej2zEdJmKeMUJD9S1B5MA 密码:y5j9

  9. MySQL基础之 统计函数总结

    五种统计函数:count().max().avg().min().max()函数 count()函数 count()函数在进行计算的时候,是分情况进行计算的,主要是一下两种 1.采用count(*)对 ...

  10. laravel上传图片报错

    在laravel的上传图片代码文件中路径如下: vendor\stevenyangecho\laravel-u-editor\src\Uploader\Upload.php第131行有一句代码错误$r ...