bzoj3135: [Baltic2013]pipesd】的更多相关文章

Description 有n个水库,m条管道.Jester会在某些管道中间凿开一个洞,让水流出来或者用水泵把水打进去.保证这个流速是偶数.对于一条管道(u, v),如果在中间凿开了一个洞让水流出来,流速是2d m^3/s,那么水库u和v失水速度为d m^3/s.同理,如果往一条管道(u, v)注水,流速为2p m^3/s,那么u和v得到水的速度是p m^3/s. 给定图的构造以及每个水库的水流的变化,问每条边的方案是否唯一. Input 第一行:水库数量n,管道数量m (1 <= n <= 1…
3136: [Baltic2013]brunhilda Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 238  Solved: 73[Submit][Status][Discuss] Description 给定m个素数和Q个询问.每个询问有n个人,每次操作可以任意选择其中的一个素数p(素数可以重复使用),然后去掉剩余人数 mod p个人.对于每个询问,我们想知道,至少需要多少步操作才能去掉所有人. Input 第一行:素数个数m和询问个数Q(1…
3133: [Baltic2013]ballmachine Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 148  Solved: 66 Description 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树滚下.如果同时有多个点可以走,那么会选择编号最小的节点所在路径的方向.比如依次在树根4放2个球,第一个球会落到1,第二个会落到3: 从某个位置拿走一个球,那么它上方的球会落下来.比如依次拿走…
BZOJ_3133_[Baltic2013]ballmachine_堆+倍增 Description 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树滚下.如果同时有多个点可以走,那么会选择编号最小的节点所在路径的方向.比如依次在树根4放2个球,第一个球会落到1,第二个会落到3: 从某个位置拿走一个球,那么它上方的球会落下来.比如依次拿走5, 7, 8三个球: Input 第一行:球的个数N,操作个数Q (N, Q <= 100 000)下面N行…
[BZOJ3133] [Baltic2013]ballmachine(树上倍增+堆) 题面 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树滚下.如果同时有多个点可以走,那么会选择编号最小的节点所在路径的方向.比如依次在树根4放2个球,第一个球会落到1,第二个会落到3: 从某个位置拿走一个球,那么它上方的球会落下来.比如依次拿走5, 7, 8三个球: 分析 我们可以预处理出从根节点放第i个球时,球到达的位置x.因此,对于每个节点x,我们记录放第几…
题目描述 https://www.lydsy.com/JudgeOnline/problem.php?id=3133 题解 还是分两个操作来说吧. 先看第一个操作,放球,可以发现,对于祖先节点和后代节点来说,后代节点没有放球,祖先节点就不能放,对于兄弟节点来说,子树编号小的没放满,编号大的就不能放,可以发现这是树的后序遍历. 用堆维护这个顺序,依次放就好了. 第二问更简单,就是找到最靠上的有球的祖先,把那个位置拿走就好了. 代码 #include<iostream> #include<c…
分析: 我们考虑,因为每次放置的时候,都是向子树中含有的编号最小的哪一个走,那么放置的顺序是固定的,我们将边以to的子树最小排序,之后得到的出栈序就是球的放入顺序.目测可以使用堆来实现,线段树也能实现,链表和并查集不能实现. 每次放球可以暴力的放入,因为满足实际不可以放入超过n个球. 每次取走的球可以通过倍增来找到,因为满足球是连续的. 附上代码: #include <cstdio> #include <algorithm> #include <cstdlib> #in…
炸一看好像很神仙的样子,其实就是个sb题 万年不见的1A 但是我们可以反过来想,先选一个起点到终点的联通块,然后这联通块后面相当于就能够走了,继续找联通块 然后就能发现直接相邻的脚步相同的边权为0,否则边权为1 直接bfs找最深的层就完事了 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<…
这个题为什么会放在数据结构啊 首先因为有决策包容性,对于一个n每次必然选择一个n%p最大的p,令n减n%p 设fi表示i变成0的步数的话,同样我们可以知道f是有单调性的 假如fd能转移到fk,首先d一定是某个p的倍数,并且k-d+1<pi才能够转移 对于一个合法的d,它能够影响的长度就是pp,其中pp|d并且在给出的质数中是最大的,设它为s(d) 由于f有单调性,并且决策点影响的是由它开始往后的一段,那么决策也有单调性,假如我们知道了这个就可以O(n)指针扫决策点更新了 考虑如何求s 我们可以线…
稍微用脑子想一想,要是一个回文数,要么s[i]==s[i+1]要么s[i]==s[i+2]就可以实锤了 所以多开两维表示最近两位选的是什么数就完了 注意前导0 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; typedef lo…