XJOI2016提高组模拟题一 排队

就是这样一道题了。

维护这一棵树。

对于第一种操作,我们从题意可知,节点的访问顺序就是DFS序,至于先小后大的限制,只需要用伟大的STL-sort来逐层排序就很好了,代码简洁,时间复杂度低。

按DFS序把这些点存入优先队列,如果该点没人,就在该队列中,人的流动先后顺序就可以用出入优先队列来维护。

对于第二种操作。这里用到了倍增的思想寻找第一个有人的祖宗点,那么这个点下次就要优先进人,所以进队。

#include<cstdio>

#include<cstdlib>

#include<cstring>

#include<algorithm>

#include<vector>

#include<queue>

using namespace std;

vector<int>sa[100005];

int dad[100005][28],p[100005],id=0;

int n,t;

void dfs(int x,int fa)

{

 dad[x][0]=fa;

 int nn=sa[x].size();

 for (int i=0;i<nn;i++)

 {

  if (sa[x][i]!=fa)

  {

   dfs(sa[x][i],x);

  }

 }

 p[x]=++id;

}

int tf[100005];

struct node{

    int x;

    node(){};

    node(int x):x(x){};

    bool operator<(const node&a) const {return p[x]>p[a.x];}

};

priority_queue<node>sb;

int find(int x,int &ans)

{

 for (int i=20;x!=1&&i>=0;i--)

 {

  if (dad[x][i]>0&&tf[dad[x][i]]==false)

  {

   x=dad[x][i];ans+=(1<<i);  

  }

 }

 return x;

}

int main()

{

 scanf("%d%d",&n,&t);  

 for (int i=1;i<n;i++)

 {

  int x,y;

  scanf("%d%d",&x,&y);

  sa[x].push_back(y);

  sa[y].push_back(x);  

 }

 for (int i=1;i<=n;i++)

 sort(sa[i].begin(),sa[i].end());

 dfs(1,0);

 for (int i=1;i<=20;i++)

   for (int j=1;j<=n;j++)

   {

    dad[j][i]=dad[dad[j][i-1]][i-1];

   }

 for (int i=1;i<=n;i++)

 sb.push(node(i)),tf[i]=true;

 for (int i=1;i<=t;i++)

 {

  int op,x,ans=0;

  scanf("%d%d",&op,&x);

  if (op==1)

  {

   node soy;

   while(x--)

   {

    soy=sb.top();

    sb.pop();

    tf[soy.x]=false;

   }

   ans=soy.x;

  }

  else

  {

   int soy=find(x,ans);

   sb.push(node(soy));tf[soy]=true;

  }

  printf("%d\n",ans);

 }

}

时间: 2024-10-10 04:04:35

XJOI2016提高组模拟题一 排队的相关文章

XJOI-NOIP2015提高组模拟题1 day1

其实这只是一道题的题解= =: 博主太弱不会T1T3: 然而我还是要吐槽一下,T2难道你们就没有一点写数据结构的心情吗! T1: 留坑(不太可能填): T2: 题意: 给出大小为n的一个四维点集,和m次询问: 每次询问给出一个点,求四维坐标均小于等于这个点的集合大小: n,m<=30000: 题解: 看到这题的第一反应是排序乱搞,noip难度应该随便玩玩就过了嘛(笑): 但是仔细看看不是这么回事! bzoj有一道题叫陌上花开--然而那个是三维的: 回忆一下,PoPoQQQ让我们搞排序+CDQ分治

ZROI提高组模拟赛05总结

ZROI提高组模拟赛05总结 感觉是目前为止最简单的模拟赛了吧 但是依旧不尽人意... T1 有一半的人在30min前就A掉了 而我花了1h11min 就是一个简单的背包,我硬是转化了模型想了好久,生生把一个弱智题变成了一个不可做题 最后竟然在转化两次后的模型上以为自己做出来了 这个题比别人多花的1h左右的时间,而且只得到了30分,成为了这场比赛失败的关键因素 T2 依旧是一道简单题 有人20min之内就A掉了 感觉放在CF里最多算一道Div2 D,还是简单的那种 可是我又一次想复杂了 大意就是

提高组模拟赛总结(1)

T1 : 题意:给定一个连续的颜色序列,至多可以去掉k种颜色,问能得到的最大连续单个颜色长度是多少 n <= 10 ^ 5 做法:考试的时候十分斯波,在统计的时候写了线段树统计,实际上根本不用 维护了两个指针表示当前的序列,离散化后用桶维护每一个颜色的数量,如果颜色 <= k + 1就一直加颜色进来,不然就一直移动左指针删除颜色,每次改变某一颜色数量时更新一下最大值就好了 T2: 题意:(实在没办法总结一句话题意了ORZ,总之是个变种的Lis)有 n 个节目,其描述了在 Ti时 刻 Xi号社团

数学方法模拟(洛谷1017 进制转换NOIp2000提高组第一题)

我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+3*10^0这样的形式. 与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置的(值-1)为指数,以2为底数的幂之和的形式.一般说来,任何一个正整数R或一个负整数-R都可以被选来作为一个数制系统的基数.如果是以R或-R为基数,则需要用到的数码为 0,1,....R-1.例如,当R=7时,所需用到

2014-10-18 noip提高组模拟赛(codecomb)[未填]

> <看了一下觉得挺难的...除了T2 T1只想到了找环,> <倍增的思想没有学过,所以看题解看得雨里雾里的(最近真的打算学一下!) T2贪心..很容易看出的 T3感觉题目没有怎么看懂...> <正解居然是树形dp 果然不太会 T4蒟蒻> <我连最小子矩阵都不会求T_T其他更不用说了 虽然没有参加比赛,但感觉自己到不了200(hzwer说没有200应该去参加普及组QAQ) 题目出的挺好的,觉得noip极有可能出现T1T2T3,所以在此mark 而且T1以为是

提高组模拟赛总结(3)

貌似是tyvj 2012年的题? T1:给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都能够到达终点.绿豆蛙从起点出发,走向终点. 到达每一个顶点时,如果有K条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 1/K . 现在绿豆蛙想知道,从起点走到终点的所经过的路径总长度期望是多少? 刚看到题目,歪歪斜斜的每页上都写着'水题'几个字.我横竖睡不着,仔细看了半夜,才从字缝里看出字来,满本都写着一个字是'坑'!" 显然

提高组模拟赛总结(2)

T1: 题意:给定一个01背包,求将背包装到不能再放任何剩余物品的方案数 做法:部分分 F[j][k]表示前i个物品分配j空间,最小没有使用的物品为k的方案数 F[j][k] = Max(F[j-w[i]][k] + a[i], F[j][k]) 实际上并不需要枚举k,显然物品越重其前面必选的物品就越多,能提供的决策就越少,考虑对物品从大到小排序,此时如果取了第i个物品,i+1 .. n必然要被选择到,如果此时剩下的钱刚好放不下i且放得下 i - 1,那就说明 i 就是没有使用的最小的物品,可以

Vijos P1496 火柴棒等式 【NOIP2008提高组第二题】

题目链接:https://vijos.org/p/1496 题目大意: 给你n(n<24)根火柴棍,你可以拼出多少个形如“A+B=C”的等式?("+"和"="各自需要两根火柴棍) 如果A≠B,则A+B=C与B+A=C视为不同的等式(A.B.C>=0) n根火柴棍必须全部用上 题目思路: 其实这题很水,n最大才24,扣掉+和=就只有20,直接枚举就行. 稍微算一下就知道每个数最大不会超过1111 两层for枚举每个数,判断是否用尽火柴即可. 1 // 2

noip2010提高组3题题解 by rLq

本题地址http://www.luogu.org/problem/show?pid=1525 关押罪犯 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多.如果两名怨气值为c 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为c 的冲突事件. 每年年末,警察局会将本年内监狱中