可并堆-bzoj2809: [Apio2012]dispatching
来源:互联网 发布:erp软件排名 编辑:程序博客网 时间:2024/05/17 04:33
http://www.lydsy.com/JudgeOnline/problem.php?id=2809
本来1A的,结果,ll没开全;
首先题目看懂,这个题目不长,但是要看懂;
看懂之后就会发现整个结构是树型的;
然后我们就可以搞事了呀;
和树形dp很像的;
我们维护n个大根堆;
不断把子节点合并到跟节点;
合并完了就不断弹出堆顶,就是工资最大的数;
直到当前堆里面全部工资小于等于m;
更新答案;
注意的是这里的一个堆,里面的参数的指向不清晰;
模版题目的指向是很清晰的;
这个就要严谨的逻辑关系;
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define Ll long longusing namespace std;struct cs{ int to,next;}a[100000];struct heap{ Ll xx,yy,vv,money,num,fa;//vv是领导值,num堆内是有几个点,sum是总工资 Ll sum;}q[100001];int head[100001];Ll n,m,x,y,z,ll,S;Ll ans;void init(int x,int y){ a[++ll].to=y; a[ll].next=head[x]; head[x]=ll;}int merge(int x,int y){ if(!x)return y; if(!y)return x; if(q[x].money<q[y].money)swap(x,y); q[x].yy=merge(q[x].yy,y); swap(q[x].xx,q[x].yy); return x;}void del(int x){//弹出堆顶 int xx=q[x].fa; q[x].num--; q[x].sum-=q[xx].money; q[x].fa=merge(q[xx].xx,q[xx].yy);}void dfs(int x){ for(int k=head[x];k;k=a[k].next){ dfs(a[k].to); q[x].num+=q[a[k].to].num; q[x].sum+=q[a[k].to].sum; q[x].fa=merge(q[x].fa,q[a[k].to].fa); } while(q[x].sum>m)del(x); ans=max(ans,q[x].vv*q[x].num);}int main(){ scanf("%lld%lld",&n,&m); for(int i=1;i<=n;i++){ scanf("%lld%lld%lld",&x,&y,&z); q[i].money=y; q[i].sum=y; q[i].num=1; q[i].vv=z; q[i].fa=i; init(x,i); if(!x)S=i; } dfs(S); printf("%lld",ans);}
0 0
- [BZOJ2809] [APIO2012] dispatching - 可并堆
- [BZOJ2809][Apio2012]dispatching(可并堆)
- 可并堆-bzoj2809: [Apio2012]dispatching
- bzoj2809 [Apio2012]dispatching(可并堆)
- [BZOJ2809][Apio2012]dispatching(枚举&dfs序+主席树||可并堆||splay+启发式合并)
- BZOJ 2809 [Apio2012]dispatching 可并堆
- [可并堆] BZOJ 2809 [Apio2012]dispatching
- 【BZOJ 2809】[Apio2012]dispatching 可并堆
- BZOJ 2809: [Apio2012]dispatching 可并堆
- BZOJ 2809 Apio2012]dispatching 斜堆 可并堆
- 【APIO2012】【BZOJ2809】派遣dispatching
- bzoj2809: [Apio2012]dispatching
- bzoj2809: [Apio2012]dispatching
- bzoj2809: [Apio2012]dispatching
- Bzoj2809:[Apio2012]dispatching:左偏树
- bzoj2809【APIO2012】dispatching
- 【bzoj2809】 Apio2012—dispatching
- 【APIO2012】bzoj2809 dispatching
- Spark算子执行流程详解之七
- 将本地项目上传到GitHub
- C# 静态方法与动态方法
- Spring Boot+AngularJS+BootStrap实现进度条
- shiro第三课
- 可并堆-bzoj2809: [Apio2012]dispatching
- spring 事务
- 三分钟,如何说好自我介绍?
- pat-a1054. The Dominant Color (20)
- php AES 加解密方法使用函数了解
- 开启博客之旅
- css用@media适配不同尺寸的手机布局方式
- 蓝牙Setting和Framwork简介
- org.hibernate.hql.ast.QuerySyntaxException