E62 树形DP P8677 [蓝桥杯 2018 国 A] 采油
视频链接:E62 树形DP P8677 [蓝桥杯 2018 国 A] 采油_哔哩哔哩_bilibili
P8677 [蓝桥杯 2018 国 A] 采油 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
// 树形DP+贪心 O(nlogn) #include<bits/stdc++.h> #define N 100010 using namespace std; vector<int> e[N]; int n,B[N],S[N],f[N],len; struct man{int b,s;}; bool cmp(man x,man y){ return x.b-x.s>y.b-y.s; } void dfs(int u,int fa){ vector<man> t; t.push_back({B[u],S[u]}); for(auto v:e[u]){ if(v==fa) continue; dfs(v,u); S[u]+=S[v]; t.push_back({f[v],S[v]}); } sort(t.begin(),t.end(),cmp); for(auto i:t) f[u]+=i.s; f[u]+=max(t.back().b-t.back().s,0); } int main(){ scanf("%d",&n); for(int i=1;i<=n;++i)scanf("%d",&B[i]); for(int i=1;i<=n;++i)scanf("%d",&S[i]); for(int i=2,a,b;i<=n;++i){ scanf("%d%d",&a,&b); e[i].push_back(a),e[a].push_back(i); len+=b*2; } dfs(1,0); printf("%d %d\n",len,f[1]); }
// 贪心 O(nlogn) #include<bits/stdc++.h> #define N 100010 using namespace std; int n,B[N],S[N],t[N],len,ans,mx; int main(){ scanf("%d",&n); for(int i=1;i<=n;++i)scanf("%d",&B[i]),mx=max(mx,B[i]); for(int i=1;i<=n;++i) scanf("%d",&S[i]),ans+=S[i],t[i]=B[i]-S[i]; for(int i=2,a,b;i<=n;++i){ scanf("%d%d",&a,&b); len+=b*2; } sort(t+1,t+n+1); ans+=max(t[1],0); ans=max(ans,mx); printf("%d %d\n",len,ans); }
分类:
E 动态规划
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2023-10-10 C43 线段树+暴力区修 P4145 上帝造题的七分钟 2