首页 > TAG信息列表 > P2458
【洛谷】 P2458 [SDOI2006]保安站岗 (树形dp)
题意:一棵\(n\)个点\(m\)条边的树,每个点都有点权,如果某个点被标记了,那么这个点和它相邻的点会被覆盖,贡献是被标记的这个点的点权,问将所有点覆盖需要花费的最小代价。 题解:首先,这题不能和树形dp的模板题等同,因为假如有一颗树\(1-2-3-4\),我们把\(1,4\)标记,那么\(1,2,3,4\)就全洛谷P2458题解
题面 和这个题很像,但是本题有一个花费而那一题没有,所以我们要把 \(f\) 数组开大一维。 \(f_{i,j}\) 表示节点 \(i\) 为根的子树在 \(i\) 点是 \(j\) 状态下的最小花费。 状态可以参照我的题解。 那一个题解写得很含糊,这里再讲一遍。 分三种状态: 让父亲覆盖自己; 自己覆盖自己; 儿子P2458 [SDOI2006]保安站岗
没注意放置时还有权值还行 #include<bits/stdc++.h>using namespace std;int n,val[150000],m,ne,a,b,head[150000],f[150000][3];struct node{int nxt,to;}eg[150000];void adde(int u,int v){eg[++ne].nxt=head[u];eg[ne].to=v;head[u]=ne;}void dfs(int u,int fa){题解 P2458 【[SDOI2006]保安站岗】
题目链接 Solution [SDOI2006]保安站岗 题目大意:给定一棵\(n\)个点的树,每个点可以覆盖与之相连的所有点,求最小点集覆盖所有点。 我们用\(f[u][d]\)表示以\(u\)为根的这棵子树,\(u\)点的覆盖状态为\(d\)时的最小点花费.(\(d = 0\)时\(u\)点被父节点覆盖,\(d = 1\)时\(u\)点被自