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

P9132 [USACO23FEB] Watching Cowflix P 题解

采用了更加好想的根号分治做法。

首先需要会对单独的常数 \(k\) 树形 DP 计算。树上连通块问题,考虑在最浅的节点统计贡献,因为这样的点只有一个,最方便统计贡献。于是设 \(f_{u,0/1}\) 表示考虑到节点 \(u\),节点 \(u\) 在/不在一个连通块中的贡献。转移有

\[\begin{cases} \displaystyle f_{u,0}=\sum_{v\in\text{son}(u)}\min(f_{v,0},f_{v,1}+k)\\ \displaystyle f_{u,1}=1+\sum_{v\in\text{son}(u)}\min(f_{v,0},f_{v,1}) \end{cases} \]

注意当 \(s_u=\tt1\) 时,\(f_{u,0}\) 的状态是不合法的,需要设为极大值以排除。最后答案是 \(\min(f_{1,0},f_{1,1}+k)\)

然后考虑根号分治,实际上这题的根号分治还是有点注意力的。首先答案显然单增,但额外需要注意到的一点是答案的差值单调不增。原因是 \(k\) 固定时答案可以看作若干个关于 \(k\) 的一次函数的最小值,这显然是下凸的,所以有差值不增的性质。

并且这个差值减小的速度也是递减的。也就是说取一个阈值 \(B\),当 \(k\le B\) 时差值递减地很快,但当 \(k>B\) 时差值递减的速度就变慢了。于是考虑对 \(k\le B\) 每次 \(O(n)\) 树形 DP 暴力求解,对于 \(k>B\) 时二分找到差值不同的位置,那么中间这一段的答案就可以由一个固定的差值递推求解。因此总的复杂度是 \(O(nB+dn\log n)\) 的,其中 \(d\)\(k=B+1\)\(k=B\) 时答案的差值。

然后这个 \(B\) 取一个 \(\sqrt n\) 就过了。

#include<bits/stdc++.h>
#define il inline
using namespace std;constexpr int MAXN=2e5+5;
int n,head[MAXN],tot;
string s;
struct{int v,to;
}e[MAXN<<1];
il void addedge(int u,int v){e[++tot]={v,head[u]};head[u]=tot;
}
namespace K{int g[MAXN][2],K;int ans[MAXN];il void dfs(int u,int fno){g[u][0]=0,g[u][1]=1;for(int i=head[u],v;i;i=e[i].to){if((v=e[i].v)==fno) continue;dfs(v,u);g[u][0]+=min(g[v][0],g[v][1]+K);g[u][1]+=min(g[v][0],g[v][1]);}if(s[u]=='1') g[u][0]=0x3f3f3f3f;}il int gt(int k){if(k>n) return 0;if(ans[k]) return ans[k];K=k;dfs(1,0);return ans[k]=min(g[1][0],g[1][1]+k);}
}int main(){cin.tie(nullptr)->sync_with_stdio(0);cin>>n>>s,s=' '+s;for(int i=1,u,v;i<n;i++){cin>>u>>v;addedge(u,v),addedge(v,u);}int B=sqrt(n);for(int k=1;k<=B;k++) cout<<K::gt(k)<<'\n';int dt=K::gt(B+1)-K::gt(B);cout<<K::gt(B+1)<<'\n';for(int ndt=dt,pos=B+1;ndt>0;){int l=pos+1,r=n,ans=pos;while(l<=r){int mid=(l+r)>>1;if(K::gt(mid)-K::gt(mid-1)==ndt) ans=mid,l=mid+1;else r=mid-1;}int lst=K::gt(pos);for(int j=1;j<=ans-pos;j++) cout<<(lst+=ndt)<<'\n';pos=ans+1;if(pos>n) break;ndt=K::gt(pos)-K::gt(ans);cout<<K::gt(pos)<<'\n';}return 0;
}
http://www.jsqmd.com/news/358515/

相关文章:

  • URL.createObjectURL 和 reader.readAsDataURL 对比,适用场景和最佳实践?
  • 毕业设计 基于单片机的红外热视仪(源码+硬件+论文)
  • C语言对话-31.与大虾对话 领悟设计模式
  • 别墅入户门一线品牌有哪些?2026九大领军者技术实力全面解析 - 匠言榜单
  • 2026 AI写论文软件大比拼:学生党适配指南
  • 亲测好用!一键生成论文工具 千笔·专业学术智能体 VS 文途AI 专科生专属
  • 探讨靠谱的生育津贴咨询应用品牌怎么选 - mypinpai
  • 从零开始写算法——贪心篇2:买卖股票的最佳时间 + 划分字母区间
  • 2026年倍克朗性价比排名,可靠的泳池漆厂家哪家好 - 工业推荐榜
  • 搞自动化的人应该都玩过电梯模型吧?今天咱们来唠唠用西门子S7-200 PLC和组态王搞五层电梯控制那点事儿。这玩意儿说难不难,但要让电梯跑得顺溜还得费点心思
  • 倍克朗专业不专业 泳池漆排名 价格合理的推荐 - myqiye
  • 屠榜级身材引爆大银幕!阿如那新戏拳击造型惊呆网友:反正很曼妙
  • HTTP 401 - {“code“:“InvalidApiKey“,“message“:“Invalid API-key provided.“,“request_id“:“d2725b0b-cb8
  • FileReader 四种主要读取方法对比
  • 江西医养结合养老院怎么选,有这些联系电话不怕找不到合适的 - mypinpai
  • 2026年精密轧机推荐厂商排行榜,实力大揭秘 - 工业品牌热点
  • 探讨深圳高新邦科技有限公司,为你揭秘其服务特色及价格 - 工业品牌热点
  • 拯救油塌发根!2026年值得入手的6款高泡控油洗发水,洗完蓬松感十足 - 华Sir1
  • 完整教程:双引擎时代:GEO与SEO如何协同重塑品牌增长路径
  • 2026年广州可靠的CE认证机构排名,高性价比CE认证授权机构分享 - 工业品网
  • 2026年南昌热门的豆包推广公司推荐,哪家口碑好且费用合理? - myqiye
  • 算法练习刷题题单 | 数学(163题)
  • 工厂设备图片素材推荐:捕捉科技感与细节瞬间 - 详解
  • 梳理值得选的滚珠丝杠生产厂,山东品牌性价比排行 - 工业设备
  • PPML 估计 + 一般均衡求解?ge_gravity2 一套 Stata 命令全搞定
  • 2026GEO行业权威推荐:圆周率——技术自研驱动的行业领航者 - 提酒换清欢
  • 2026年靠谱的导轨油服务品牌推荐,鑫瑞泽润滑油信誉有保障 - 工业品网
  • 2026年广州在职考研机构推荐,聊聊在职考研有名学校与规划 - 工业推荐榜
  • redis、mongodb、memcached 三个缓存数据库异同比较表
  • 面试高频问题-空间换时间与时间换空间