BZOJ4027: [HEOI2015]兔子与樱花
2016-04-07 21:47
127 查看
第一眼看上去200w的数据好像只能贪心了吧…怎么贪呢…>_<…
首先分析出来一条很显然的性质,如果我们定义一个点的权值d[x]=c[x]+son[x],那么删掉一个点会使得它的父亲的权值d[fa[x]]+=d[x]-1。
因为不管删除哪个点,对答案的贡献都是1,所以对于一个点如果删除它的儿子节点,显然应该让权值从小到大来删除。f[x]表示已经将以x为根的子树中的点贪心的删完之后x的权值,那么f[x]+=f[ver[i]]-1直到f[x]>m。输出答案即可。
为什么是正确的呢?考虑删除一个点之后的影响,首先删除了一个点会使答案+1,然后最多会使得它的某个祖先不能继续向上合并,答案最多-1,也有可能不减,这样可以证明删除掉这个点一定不会是答案变劣,所以贪心是正确的。
(哎一上来就想了一个错误的贪心,写了发线段树之后拍起来发现全是错…>_<…这要是HEOI2015就这样爆掉一道题…希望HEOI2016好运吧…)
首先分析出来一条很显然的性质,如果我们定义一个点的权值d[x]=c[x]+son[x],那么删掉一个点会使得它的父亲的权值d[fa[x]]+=d[x]-1。
因为不管删除哪个点,对答案的贡献都是1,所以对于一个点如果删除它的儿子节点,显然应该让权值从小到大来删除。f[x]表示已经将以x为根的子树中的点贪心的删完之后x的权值,那么f[x]+=f[ver[i]]-1直到f[x]>m。输出答案即可。
为什么是正确的呢?考虑删除一个点之后的影响,首先删除了一个点会使答案+1,然后最多会使得它的某个祖先不能继续向上合并,答案最多-1,也有可能不减,这样可以证明删除掉这个点一定不会是答案变劣,所以贪心是正确的。
(哎一上来就想了一个错误的贪心,写了发线段树之后拍起来发现全是错…>_<…这要是HEOI2015就这样爆掉一道题…希望HEOI2016好运吧…)
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long //by:MirrorGray using namespace std; const int N=2111111; int n,m; int tot=-1,head ,ver ,nxt ,c ,ans; void read(int &x,char ch=0){ for(ch=getchar();ch<'0'||ch>'9';ch=getchar()); for(x=0;ch>='0'&&ch<='9';x=x*10+ch-'0',ch=getchar()); } void add(int x,int y){ nxt[++tot]=head[x]; head[x]=tot; ver[tot]=y; } void dfs(int x,int f){ for(int i=head[x];~i;i=nxt[i])dfs(ver[i],x); static int s ;int top=0; for(int i=head[x];~i;i=nxt[i])s[++top]=c[ver[i]]; sort(s+1,s+1+top); for(int i=1;i<=top;i++)if(c[x]+s[i]-1<=m)c[x]+=s[i]-1,ans++; } int main(){ memset(head,-1,sizeof(head)); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)read(c[i]); for(int i=1;i<=n;i++){ int d;read(d); for(int j=1,b;j<=d;j++)read(b),add(i,b+1); c[i]+=d; } dfs(1,-1); printf("%d\n",ans); return 0; }
相关文章推荐
- opencv轮廓检测之椭圆检测-----算法篇(8) Hough transformation检测椭圆
- Codeforces Round #346 (Div. 2) B. Qualifying Contest
- mac 如何显示隐藏文件和.点开头文件?
- 生成1-N的排列
- 返回一个二维整数数组中最大联通子数组的和
- 线程 1
- PAT 1006. 换个格式输出整数 (15)
- CCF-201512-3 画图
- 封装.a文件以及应用.a文件
- mysql导入数据乱码
- eclipse 代码恢复到历史版本
- 设计模式六大原则——合成/聚合复用原则(CARP)
- 控制台当前行显示进度条,不换行
- vagrant系列二:vagrant的配置文件vagrantfile详解
- 树形dp-hdu1520
- 7个你可能不认识的CSS单位:rem vh vw vmin vmax ex ch
- linux下的软硬链接
- ZCCZCC Loves Codefires
- cocos2d-js常用命令
- CentOS 7 安装gogs git代码服务器