题目链接:https://vijos.org/p/1144

题解:这道题的动归稍稍有一点的复杂,因为一个节点有可能被它的子节点观察,也有可能被父节点观察;

所以我们这样表示:

f[i][0](表示当前i节点放了一个看守,即他自己和所有子节点已经被控制好)

f[i][1](表示当前i节点不放看守,但是他自己和所有子节点已经被控制好)

f[i][2](表示当前解点不放看守,子节点已被控制好但他自己没被控制)

f[i][0]=sum(min(f[son][0],f[son][1],f[son][2]));(如果当前节点放的话,那上一步不管怎么样都可以)

f[i][1]=sum(min(f[son][0],f[son][1]));(需要子节点已经被控制好,但需要注意,如果每个儿子选的都是f[son][j][1],我们需要挑出代价最小的点,改成f[son][j][0],因为我们需要当前结点被控制);

f[i][2]=sum(f[son][1]);

大概就是这么几种情况,具体程序注释里讲;

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
LL f[5000][5],cost[5000];
struct ding{int to,next;
}edge[10000];
int head[10000],n,m,root,cnt;
bool vis[5000];
void add(int u,int v){edge[++cnt].to=v; edge[cnt].next=head[u]; head[u]=cnt;}
void dfs(int x)
{bool fg=false;LL minx=2100000000;f[x][0]=cost[x];//先加上在这个点放守卫的代价for (int i=head[x];i;i=edge[i].next){int y=edge[i].to;dfs(y);f[x][0]+=min(min(f[y][1],f[y][2]),f[y][0]);minx=min(minx,f[y][0]-f[y][1]);//为了特判if (f[y][0]>f[y][1]) f[x][1]+=f[y][1];else {f[x][1]+=f[y][0];fg=true;//如果有任何一次取了f[i][0],就说明不需要特判
    }f[x][2]+=f[y][1];}if (!fg) f[x][1]+=minx;
//特殊情况
}
int main()
{int now,x;LL k; scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d%lld%d",&now,&k,&m);cost[now]=k;for (int j=1;j<=m;j++){scanf("%d",&x);add(now,x);vis[x]=true;}}for (int i=1;i<=n;i++) if (!vis[i]) root=i;
//先找到根
 dfs(root);printf("%lld\n",min(f[root][1],f[root][0]));return 0;
} 

转载于:https://www.cnblogs.com/2014nhc/p/6625427.html

树形dp小胖守皇宫(vijosP1144)相关推荐

  1. 【树形dp】vijos1144小胖守皇宫

    细节很精妙 描述 huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步 ...

  2. AcWing1077. 皇宫看守(树形DP)题解

    题目传送门 题目描述 太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状,某些宫殿间可以互相望见. 大内保卫森严,三步一岗,五步一哨,每个宫殿 ...

  3. AcWing 1077. 皇宫看守(树形DP + 状态机DP)

    AcWing 1077. 皇宫看守(树形DP + 状态机DP) 一.问题 二.分析 1.思路分析 2.状态表示 3.状态转移 4.循环设计 5.初末状态 三.代码 一.问题 二.分析 1.思路分析 在 ...

  4. 1579: 【例 5】皇宫看守(最小支配集——贪心求解/树形DP)

    [题目描述] 太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状,某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步一哨,每个宫殿都要有人全 ...

  5. LOJ10157——皇宫看守(树形DP)

    传送门:QAQQAQ 题意:在一个树上放置守卫,使每一个节点都至少有相邻一节点放置守卫,使最终经费最少 思路:树形DP 首先会想到没有上司的舞会,0表示不放守卫,1表示放守卫,但考虑到对于当前点不放守 ...

  6. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

  7. [树形dp] Jzoj P5233 概率博弈

    Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...

  8. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  9. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

最新文章

  1. 如何用Leangoo看板+脑图高效创新
  2. node 修改html文件路径,好程序员前端教程-nodejs如何读取文件夹目录的内容
  3. c语言订餐管理系统报告,用c语言编程小型的订餐管理系统,谁会啊?
  4. 机器学习在销售报价单的产品推荐场景中的作用
  5. 【百度分享】基于内核模块的测试代码编写(二)
  6. 微软商业智能BI知识整合篇-五大工具产品系列文章
  7. 程序配置amp;amp;ConfigurationManager
  8. [react] 你有用过哪些React的UI库?它们的优缺点分别是什么
  9. [你必须知道的.NET]第二十四回:认识元数据和IL(上)
  10. 安卓逆向_22( 二 ) --- Xposed 学习记录
  11. 塞内卡学院实现开源的价值
  12. getprofile()获取不到路径_获取链接文件Document——Dynamo Python系列教程(一)
  13. [家里蹲大学数学杂志]第275期华中师范大学2011年数学专业复试试题及部分参考解答...
  14. Nginx源码阅读 --- http模块 --- TCP连接过程
  15. linux程序执行时内存情况
  16. 移动APP开发环境搭建(新手)
  17. 让人感到惊艳的5款数据可视化大屏产品
  18. ES系列:解决Cluster state has not been recovered yet, cannot write to the [null] index问题
  19. FPS类游戏的逆向分析通用方法与C++逆向功能开发详解
  20. 不经历风雨,怎么见彩虹,没有人能随随便便成功

热门文章

  1. 怎么避免options请求_和上级沟通的正确打开方式:3种技巧,轻松让领导答应你的请求...
  2. 【开源项目】保存YUV420数据到本地
  3. 弱口令扫描工具mysql ftp_基于端口的弱口令检测工具--iscan
  4. python决策树算法_决策树算法及python实现
  5. 怎么使用starwind部署iscsi_2019 年总结 - 多环境多版本的部署
  6. ns3入门案例1 first.cc
  7. Pcm设备2M通道,E1的基础知识介绍
  8. 视频干扰的原因及解决方法
  9. 千兆光纤收发器调整措施
  10. PDH光端机常见故障及解决方法介绍