#树形dp#nssl 1469 W

分析
首先一些结论,每条边最多被翻一次,而且由翻的边所构成的连通块答案就是度数为奇数的点的个数的一半,
因为在连通块内必然选择两个叶子节点间的路径翻是最优的,所以也就是选择两个度数为奇数的点,所以结论很显然
设\(dp[i][0/1]\)表示第\(i\)个点与其父亲的边翻或不翻时,以第\(i\)个点为根的子树的最小代价(操作数\(x\)和路径长度\(y\))
设\(f[0/1]\)表示第\(i\)个点的儿子们是否影响第\(i\)个点的度数的最小代价(儿子们的答案之和)
那么\(f[0]=\min \{f[0]+dp[son][0],f[1]+dp[son][1]\},f[1]=\min\{f[0]+dp[son][1],f[1]+dp[son][0]\}\)
考虑用\(f[0],f[1]\)更新\(dp[i][0/1]\),那么\(dp[i][0]=\min\{(f[1].x+1,f[1].y),f[0]\},dp[i][1]=\min\{(f[1].x,f[1].y+1),(f[0].x+1,f[0].y+1)\}\)
最后输出\(dp[1][0]\)
代码
#include <cstdio>
#include <cctype>
#include <cstdlib>
#define rr register
using namespace std;
const int inf=1e9,N=100011;
struct rec{
int x,y;
rec operator +(const rec &t)const{
return (rec){x+t.x,y+t.y};
}
bool operator <(const rec &t)const{
return x<t.x||(x==t.x&&y<t.y);
}
}dp[N][2];
struct node{int y,w,next;}e[N<<1];
int as[N],k=1,n;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline rec Min(rec x,rec y){return x<y?x:y;}
inline void dfs(int x,int fa,int w){
rr rec f1=(rec){0,0},f2=(rec){inf,inf},F1,F2;
for (rr int i=as[x];i;i=e[i].next)
if (e[i].y!=fa){
dfs(e[i].y,x,e[i].w);
F1=Min(f1+dp[e[i].y][0],f2+dp[e[i].y][1]);
F2=Min(f1+dp[e[i].y][1],f2+dp[e[i].y][0]);
f1=F1,f2=F2;
}
if (w==1) dp[x][0]=(rec){inf,inf};
else dp[x][0]=Min(f1,(rec){f2.x+1,f2.y});
if (w==0) dp[x][1]=(rec){inf,inf};
else dp[x][1]=Min((rec){f1.x+1,f1.y+1},(rec){f2.x,f2.y+1});
}
signed main(){
n=iut();
for (rr int i=1;i<n;++i){
rr int x=iut(),y=iut();
rr int z1=iut(),z2=iut();
rr int z=z2==2?z2:(z1^z2);
e[++k]=(node){y,z,as[x]},as[x]=k;
e[++k]=(node){x,z,as[y]},as[y]=k;
}
dfs(1,0,0);
return !printf("%d %d",dp[1][0].x>>1,dp[1][0].y);
}
#树形dp#nssl 1469 W的更多相关文章
- [NOIP10.3模拟赛]3.w题解--神奇树形DP
题目链接: 咕 闲扯: 这题考场上把子任务都敲满了,5个namespace,400行11k 结果爆0了哈哈,因为写了个假快读只能读入一位数,所以手测数据都过了,交上去全TLE了 把边分成三类:0. 需 ...
- COGS 2532. [HZOI 2016]树之美 树形dp
可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话d ...
- 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)
题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...
- 树形DP
切题ing!!!!! HDU 2196 Anniversary party 经典树形DP,以前写的太搓了,终于学会简单写法了.... #include <iostream> #inclu ...
- BZOJ 2286 消耗战 (虚树+树形DP)
给出一个n节点的无向树,每条边都有一个边权,给出m个询问,每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接.最少的边权和是多少.(n<=250000,sigma(ki)<= ...
- HDU4003Find Metal Mineral[树形DP 分组背包]
Find Metal Mineral Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Other ...
- NOIP2011pj表达式的值[树形DP 笛卡尔树 | 栈 表达式解析]
题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算.例如:计算表达式A⊕B × ...
- 【BZOJ-3572】世界树 虚树 + 树形DP
3572: [Hnoi2014]世界树 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1084 Solved: 611[Submit][Status ...
- 【BZOJ-2286】消耗战 虚树 + 树形DP
2286: [Sdoi2011消耗战 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2120 Solved: 752[Submit][Status] ...
- 【BZOJ-2435】道路修建 (树形DP?)DFS
2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3115 Solved: 1002[Submit][Statu ...
随机推荐
- 深入理解Go语言(04):scheduler调度器-GMP里结构体源码分析
在前面一节中简单介绍了golang的调度模型-GPM模型,介绍了他们各自的作用.这篇文章就来看看他们的源码结构. Go版本:go1.13.9 M结构体 M结构体是OS线程的一个抽象,主要负责结合P运行 ...
- Youpk 脱壳机脱壳原理分析
Youpk 是一个针对整体加固和Dex抽取加固壳的脱壳机 主要是基于虚拟机的,也就是基于VA的脱壳机, 相对FART出来的更晚一些, 厂商针对少一些, 脱壳位置相对更底层一些,还提供了Dex修复的工具 ...
- 【小记事】如何设置vscode代码格式化时不要自动换行
最近一格式化就给我分好多行,好气哦(`ヘ´)=3 在setting.json中添加如下代码: "vetur.format.defaultFormatter.html": " ...
- Qt+MySql开发笔记:Qt5.9.3的mingw32版本编译MySql8版本驱动并Demo连接数据库测试
前言 之前特定的mysql版本msvc版本已经调通了,但是为了更好的跨平台,所以选择用mingw32版本,于是需要编译mysql驱动的mingw32版本的驱动库,以便提供给qt连接mysql使用. ...
- 大众点评-CAT监控平台
前言 我们禀着发现问题,解决问题的方针,针对后台诸多的服务,如何实时监控接口性能和访问频率,还要统计大盘信息?CAT作为大众点评开源的系统监控平台项目,下面就介绍一下CAT平台的搭建步骤. CAT作为 ...
- 【Azure 存储服务】关于Storage Account Queue使用的几个问题
1) 在消费Storage Queue中的数据的时候,如何只过滤出 Subject 为"message/{messageid}"这种,去掉subject为"informa ...
- Jetpack的ViewModel与LiveData总结
本文基于SDK 29 一.ViewModel与LiveData的作用: 1.viewModel: 数据共享,屏幕旋转不丢失数据,并且在Activity与Fragment之间共享数据. 2.LiveDa ...
- 通过Glide加载不可见的图片
今天遇到一个需求,需要点击分享的时候生成图片以及二维码. 即:将带有图片以及二维码的布局文件生成Bitmap,当然这个布局文件是后台生成的,并不可见,这时候会发现使用Glide加载图片没有反应. 源码 ...
- 从 HPC 到 AI:探索文件系统的发展及性能评估
随着 AI 技术的迅速发展,模型规模和复杂度以及待处理数据量都在急剧上升,这些趋势使得高性能计算(HPC)变得越来越必要.HPC 通过集成强大的计算资源,比如 GPU 和 CPU 集群,提供了处理和分 ...
- Codeforces Round 729 (Div. 2)B. Plus and Multiply(构造、数学)
题面 链接 B. Plus and Multiply 题意 给定\(n,a,b\) 可以进行的操作 \(*a\) \(+b\) 最开始的数是1 问能否经过上面的两种操作将1变为n 题解 这题的关键是能 ...