当前位置: 首页 > news >正文

CF375E

Link.

先对深度离散化,将答案转化为原本为黑点现在为白点的位置个数。

进行树形 dp 的时候遇到黑点可以选择先提起来在子树外放置(提黑点数加一),遇到白点的时候可以选择用子树外的黑点交换(提黑点数减一)。

\(f_{u,j,k}\) 表示 \(u\) 子树内没有全部覆盖,最大未覆盖点深度为 \(j\),答案为 \(k\) 的最大提黑点数(答案和提黑点数状态与值交换原因为两者大小后者更大);\(g_{u,j,k}\) 表示 \(u\) 子树内全部覆盖,最小黑点深度为 \(j\),答案为 \(k\) 的最大提黑点数。

考虑初值:

  • \(col_u=1\),则 \(f_{u,dep_u,1}=1,g_{u,dep_u,0}=0\)

  • \(col_u=0\),则 \(f_{u,dep_u,0}=0,g_{u,dep_u,0}=-1\)

考虑转移,下文称 \(dep_u=d\)

  • \(f_{u,j,k}+f_{v,j1,k1} \to f_{u,\max(j,j1),k+k1}\)

  • \(f_{u,j,k}+g_{v,j1,k1} \to f_{u,j,k+k1} (Dep_j+Dep_{j1}-2 Dep_d > x)\)

  • \(f_{u,j,k}+g_{v,j1,k1} \to g_{u,j1,k+k1} (Dep_j+Dep_{j1}-2 Dep_d \le x)\)

  • \(g_u + f_v\) 同上

  • \(g_{u,j,k}+g_{v,j1,k1} \to g_{u,\min(j,j1),k+k1}\)

第一维加第三维树形背包为 \(n^2\),第二维用前缀和优化做到 \(O(1)\) 转移,总时间复杂度 \(O(n^3)\),使用 short 存储。

#include <bits/stdc++.h>
using namespace std;
#define ll long longconst int N=505;int n,k,idx;
int head[N],nxt[N<<1],ver[N<<1],val[N<<1];inline int read(){int t=0,f=1;register char c=getchar();while(c<'0'||c>'9') f=(c=='-')?(-1):(f),c=getchar();while(c>='0'&&c<='9') t=(t<<3)+(t<<1)+(c^48),c=getchar();return t*f;
}void add(int u,int v,int w){nxt[++idx]=head[u];head[u]=idx;ver[idx]=v;val[idx]=w;
}int len;
int col[N];ll dep[N],Dep[N];void dfs(int u,int v){for(int i=head[u];i;i=nxt[i]){int dao=ver[i];if(dao==v) continue;dep[dao]=dep[u]+val[i],Dep[dao]=dep[dao];dfs(dao,u);}
}int siz[N];short f[N][N][N>>1],g[N][N][N>>1];
short fp[2][N][N>>1],fn[2][N][N>>1],gp[2][N][N>>1],gn[2][N][N>>1];void Max(short &x,short y){x=max(x,y);}void init(int u,bool p){for(int i=0;i<=min(n/2,siz[u]);i++){fp[p][0][i]=-n,gp[p][0][i]=-n,fn[p][len+1][i]=-n,gn[p][len+1][i]=-n;for(int j=1;j<=len;j++)fp[p][j][i]=max(fp[p][j-1][i],f[u][j][i]),gp[p][j][i]=max(gp[p][j-1][i],g[u][j][i]);for(int j=len;j>=1;j--)fn[p][j][i]=max(fn[p][j+1][i],f[u][j][i]),gn[p][j][i]=max(gn[p][j+1][i],g[u][j][i]);}
}short f1[N][N>>1],g1[N][N>>1];void Merge(int u,int dao){for(int i=min(n/2,siz[u]+siz[dao]);i>=0;i--){for(int j=dep[u];j<=len;j++) f1[j][i]=-n,g1[j][i]=-n;for(int j1=min(i,siz[u]);j1>=0;j1--){if(i-j1>siz[dao]) break;int j2=i-j1,p=len+1;for(int j=dep[u];j<=len;j++){while(p>1&&Dep[p-1]>2*Dep[dep[u]]+k-Dep[j]) p--;Max(f1[j][i],f[u][j][j1]+gn[1][p][j2]);Max(f1[j][i],gn[0][p][j1]+f[dao][j][j2]);Max(g1[j][i],fp[0][p-1][j1]+g[dao][j][j2]);Max(g1[j][i],g[u][j][j1]+fp[1][p-1][j2]);Max(f1[j][i],fp[0][j][j1]+f[dao][j][j2]);Max(f1[j][i],f[u][j][j1]+fp[1][j][j2]);Max(g1[j][i],g[u][j][j1]+gn[1][j][j2]);Max(g1[j][i],gn[0][j][j1]+g[dao][j][j2]);}}for(int j=dep[u];j<=len;j++) f[u][j][i]=f1[j][i],g[u][j][i]=g1[j][i];}siz[u]+=siz[dao];
}void dfs1(int u,int v){siz[u]=1;if(col[u]) f[u][dep[u]][1]=1,g[u][dep[u]][0]=0;else f[u][dep[u]][0]=0,g[u][dep[u]][0]=-1;for(int i=head[u];i;i=nxt[i]){int dao=ver[i];if(dao==v) continue;dfs1(dao,u);init(u,0);init(dao,1);Merge(u,dao);}
}signed main(){n=read(),k=read();for(int i=1;i<=n;i++) col[i]=read();for(int i=1;i<n;i++){int u=read(),v=read(),w=read();add(u,v,w),add(v,u,w);}dfs(1,0);sort(Dep+1,Dep+1+n);len=unique(Dep+1,Dep+1+n)-(Dep+1);for(int i=1;i<=n;i++)dep[i]=lower_bound(Dep+1,Dep+1+len,dep[i])-Dep;memset(f,-0x3f,sizeof(f));memset(g,-0x3f,sizeof(g));dfs1(1,0);for(int j=0;j<=n/2;j++)for(int i=1;i<=len&&Dep[i]<=k;i++)if(g[1][i][j]>=0){cout<<j<<"\n";return 0;}cout<<-1<<"\n";return 0;
}
http://www.jsqmd.com/news/566675/

相关文章:

  • Git【多人协作一】
  • 突破窗口限制:WindowResizer让桌面管理更自由
  • Qwen3-0.6B保姆级部署教程:5分钟无GPU跑通,新手也能玩转
  • 2025年深度评测:掌握Liebling主题,解锁Ghost博客的现代设计潜力
  • 【Gin框架进阶实战】构建高性能WebSocket聊天室:从基础到分布式架构
  • 2026最新宁夏书法艺考集训机构/中心/学校推荐!银川优质培训权威榜单 - 十大品牌榜
  • OpenCore Legacy Patcher技术指南:让老旧Mac焕发新生的系统扩展方案
  • 【Python MCP服务器开发终极模板】:20年架构师亲授源码级解析与高并发优化实战
  • ai辅助开发hnu计算机系统项目:智能反汇编与代码注释生成器
  • 从PyQt5到PySide6:技术栈迁移实战指南
  • langchain调用星火大模型API构建私有LLM
  • DragonOS:基于Rust内核的国产操作系统,如何为云原生时代注入新动力?
  • ClickHouse配置优化实战:关键参数详解与性能调优指南
  • 从手机充电到路由器,聊聊你身边那些‘隐形’的稳压电路是怎么工作的
  • 从实验室到生活场景:近红外脑成像(fNIRS)如何重塑认知研究边界
  • 深度解析:FanControl高级风扇控制实战指南
  • Bootstrap WYSIWYG 安全防护终极指南:如何有效预防XSS攻击
  • 抖音无水印批量下载工具:自媒体运营者的效率倍增方案,5分钟上手
  • 让通用 URL 准确落到目标 Page Builder:SAP Fiori 页面管理中的重定向实践
  • AI看图能力可能是“演出来的”:它在没看图时,也能答对80%
  • 3dsconv高效使用指南:从格式难题到批量转换的实用方案
  • PyTorch Lightning实现旋转分类:90/180/270度检测
  • G-Helper:3个理由让你彻底告别华硕官方控制中心
  • 2025年【CSDN每周小结】
  • Kometa安全配置:API密钥管理、访问控制和数据保护最佳实践
  • qstock量化分析:3行代码实现多市场数据获取与可视化
  • 2026最新宁夏美术艺考集训机构/中心/学校推荐,银川优质之选 - 十大品牌榜
  • 舜宇光学科技2025年净利润大增71.9% 光学版图加速重塑
  • Godot-MCP:打破AI与游戏引擎的次元壁,让自然语言成为你的开发助手
  • 3步搞定黑苹果:OpCore-Simplify让你的PC秒变Mac电脑