[笛卡尔树 树形DP] ICPC 2016 Hong Kong G. Scaffolding
2017-03-30 08:16
363 查看
你要搭一个一共n列的脚手架,第i列放Hi根竹子。
你每次只能搬m根竹子上脚手架,并且只能在脚手架左右和向上移动。同时如果左边右边和上面没有竹子,也可以放一根竹子在那里。
问最少需要多少次搬完。
n≤100000
直接建笛卡尔树 考虑从高往底拆 然后就可以树形DP了
fi表示拆子树i到他的father的高度需要的次数
gi可以顺带算出表示拆了后还剩几根多出来可以拆
你每次只能搬m根竹子上脚手架,并且只能在脚手架左右和向上移动。同时如果左边右边和上面没有竹子,也可以放一根竹子在那里。
问最少需要多少次搬完。
n≤100000
直接建笛卡尔树 考虑从高往底拆 然后就可以树形DP了
fi表示拆子树i到他的father的高度需要的次数
gi可以顺带算出表示拆了后还剩几根多出来可以拆
#include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; typedef long long ll; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++; } inline void read(int &x){ char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b; } const int N=100005; int n,m,a ; int sta ,p; int rt,ls ,rs ,size ; ll sum ; ll f ,g ; inline void dp(int x,int fa){ if (!x) return; dp(ls[x],x); dp(rs[x],x); sum[x]=sum[ls[x]]+sum[rs[x]]+a[x]; size[x]=size[ls[x]]+size[rs[x]]+1; f[x]=f[ls[x]]+f[rs[x]]; ll rest=(ll)(a[x]-a[fa])*size[x]; rest-=g[ls[x]]+g[rs[x]]; if (rest>0) f[x]+=(rest+m-1)/m; g[x]=(ll)f[x]*m-(sum[x]-(ll)a[fa]*size[x]); } int main(){ freopen("t.in","r",stdin); freopen("t.out","w",stdout); read(n); read(m); for (int i=1;i<=n;i++) read(a[i]); p=0; for (int i=1;i<=n;i++){ int last=0; while (p && a[sta[p]]>=a[i]) last=sta[p],sta[p--]=0; if (p) rs[sta[p]]=i; else rt=i; ls[i]=last,sta[++p]=i; } dp(rt,0); printf("%lld\n",f[rt]); return 0; }
相关文章推荐
- [构造] ICPC 2016 Hong Kong A. Colourful Graph
- [背包 压位 CDQ分治] ICPC 2016 Hong Kong H. Slim Cut
- [构造] ICPC 2016 Hong Kong I. Special Tour
- 【BZOJ 4455】 4455: [Zjoi2016]小星星 (容斥原理+树形DP)
- Hong Kong Regional Contest 2016 [Kattis - taboo]
- HDU 4799 LIKE vs CANDLE ACM/ICPC 2013 Changsha(树形dp)
- 2015-2016 ACM-ICPC, NEERC, Moscow Subregional Contest H题: Hashing [基础DP]
- 2016 ACM/ICPC Asia Regional Shenyang Online 1007/HDU 5898 数位dp
- 2016 ACM/ICPC Asia Regional Shenyang Online 1009/HDU 5900 区间dp
- 【HDU5896 2016 ACM ICPC Asia Regional Shenyang Online E】【DP 排列组合 分治ntt】Running King n个点构成含环无向图的方案数.cp
- 4557: [JLoi2016]侦察守卫 树形dp
- 【ZJOI 2016 小星星】【容斥 + 树形 DP】
- ICPCCamp 2016 Day 3 - F Similar Subsequence (dp)
- NOIP2011pj表达式的值[树形DP 笛卡尔树 | 栈 表达式解析]
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest - J. Bottles(DP)
- 2016-2017 ACM-ICPC East Central North America Regional Contest (ECNA 2016) F 区间dp
- [后缀自动机][树形DP] BZOJ 4566: [Haoi2016]找相同字符
- 动态规划(树形DP):LNOI 2016 侦察守卫
- BZOJ.4753.[JSOI2016]最佳团体(01分数规划 树形背包DP)
- 【NOIP2016练习】T2 forest (树形DP,数论)