首页 > 其他分享 >luogu P3571 [POI2014]SUP-Supercomputer

luogu P3571 [POI2014]SUP-Supercomputer

时间:2022-10-05 19:46:10浏览次数:89  
标签:int luogu Supercomputer st sh 点数 using P3571 define

题面传送门

感觉考场上不一定做得出来的题目?

首先我们可以得到每个点的深度,然后猜测这个只和每个层的深度有关。

我们考虑这样一个贪心:对于每一层的每个点,如果这个点有子节点,那么优先搞这个点,否则先放一放,这样可以保证如果点数足够,那么能操作的点数是递增的,如果操作的点数不递增,那么显然无论什么操作都最优只能做到这样。

则我们统计出当前层的的点数,并设\(f_i\)为操作到第\(i\)步的时候最少能剩下的点数,则\(f_i=\max(f_{i-1}+q_i-k,0)\)。可以做到\(O(nq)\)。

实际上可以发现是一条斜线截凸包的形式,则可以斜率优化,时间复杂度\(O(n+q)\)

code:

#include<bits/stdc++.h>
#define Gc() getchar() 
#define Me(x,y) memset(x,y,sizeof(x))
#define Mc(x,y) memcpy(x,y,sizeof(x))
#define d(x,y) ((m)*(x-1)+(y))
#define R(n) (rnd()%(n)+1)
#define Pc(x) putchar(x)
#define LB lower_bound
#define UB upper_bound
#define PB push_back
using ll=long long;using db=double;using lb=long db;using ui=unsigned;using ull=unsigned ll;
using namespace std;const int N=1e6+5,M=pow(6,10)+5,K=2e3+5,mod=998244353,Mod=mod-1;const db eps=1e-5;const int INF=1e9+7;
int n,m,k,x,y,z,Mx,d[N],A[N],Fl[N],Ct,ToT,st[N],sh,H,Ans[N];
db slope(int x,int y){return (Fl[y]-Fl[x])*1.0/(y-x);}
int main(){
	freopen("1.in","r",stdin);
	int i,j;scanf("%d%d",&n,&m);for(i=1;i<=m;i++)scanf("%d",&A[i]);d[1]=1;for(i=2;i<=n;i++) scanf("%d",&x),d[i]=d[x]+1,Fl[d[i]]++,Mx=max(Mx,d[i]);
	Fl[1]=1;for(i=1;i<=Mx;i++) Fl[i]+=Fl[i-1];for(i=1;i<=Mx;i++) {while(sh>1&&slope(st[sh-1],st[sh])>slope(st[sh],i)) sh--;st[++sh]=i;}
	H=1;for(i=1;i<=n;i++){while(H^sh&&slope(st[H],st[H+1])<i) H++;Ans[i]=Fl[st[H]]+1ll*(Mx-st[H])*i;}for(i=1;i<=m;i++) printf("%d ",(n-Ans[min(A[i],n)]+A[i]-1)/A[i]+Mx);
}

标签:int,luogu,Supercomputer,st,sh,点数,using,P3571,define
From: https://www.cnblogs.com/275307894a/p/16756196.html

相关文章

  • luogu P3822 [NOI2017] 整数
    Link题解这里有一个很傻逼的无脑做法:https://www.luogu.com.cn/blog/80614/solution-p3822正常的正解做法是考虑用线段树维护每一位是什么,然后将\(a\)拆成二进制位,对......
  • luogu P3644 [APIO2015] 八邻旁之桥
    Link题解首先忽略掉同侧的询问。对于\(K=1\),它其实就是问一个点到其它点的距离之和最小值,直接找到中位数然后计算即可。对于一条路线,我们可以发现,如果建的桥里这两个......
  • 【luogu P5906】【模板】回滚莫队&不删除莫队
    【模板】回滚莫队&不删除莫队题目链接:luoguP5906题目大意给你一个序列,多次询问每次问一个区间,求里面相同的数的最远间隔距离。思路考虑莫队,发现加入一个点好处理,但是......
  • luogu P4183 [USACO18JAN]Cow at Large P
    题面传送门奇妙的题目。首先我们可以得出当\(u\)点为根的时候\(i\)点是否可以被控制:设\(g_i\)表示\(i\)号点到最近的叶子距离,则当$g_i\geqdist(u,i)\(时\)u\(子树内的......
  • Luogu P5089 [eJOI2018] 元素周期表 题解
    (从洛谷博客搬过来的)这道题嘛..主要还是找性质推规律。拿到题,第一眼:噢噢爆搜啊。第二眼:噢噢贪心啊。第三眼:很好贪心假了。然后苦思冥想半个小时去看题解。看到兔队的......
  • Luogu P6937 [ICPC2017 WF]Secret Chamber at Mount Rushmore
    (从洛谷博客搬过来的)简要题意:告诉你可以从哪些字符转化为哪些字符,然后再问你某一个字符串能否转化为另一个字符串。这里提供两种做法:爆搜和传递闭包。算法一爆搜看到......
  • CSP模拟练习赛1 https://www.luogu.com.cn/contest/82861#problems
    P1321单词覆盖还原简单思路字符串#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<map>#definelllonglon......
  • Luogu P3469 [POI2008]BLO-Blockade(tarjan求割点)
    题目链接:https://www.luogu.com.cn/problem/P3469 [POI2008]BLO-Blockade题面翻译B城有$n$个城镇,$m$条双向道路。每条道路连结两个不同的城镇,没有重复的道路,所有......
  • luogu P7004 [NEERC2013]Interactive Interception 题解
    题目链接感觉比较玄学的交互,看了题解才会做。主体的思想是,我们在二分位置的同时也对\(v\)的范围进行修改。假设我们现在的区间是\([L,R]\),那么我们取\(mid=\frac{L......
  • Luogu P7503 「HMOI R1」文化课
    题传先想一个巨shaber的暴力DP:设\(f_{i}\)为对前\(i\)个人分段的最优解,则:\[f_{i}=\max_{0\lej<i}\{f_{j}+\operatorname{W}(j+1,i)\}\]其中:\[\operatorname{W......