luogu P2016 战略游戏】的更多相关文章

题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能了望到所有的路. 注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到. 请你编一程序,给定一树,帮Bob计算出他需要放置最少的士兵. 输入输出格式 输入格式: 第一行 N,表示树中结点的数目. 第二行至第N+1行,每行描述每个结点信息,依次为:该结点标号i,k(后面有k条边与结点I相…
嘟嘟嘟 树形dp水题啦. 刚开始以为和[SDOI2006]保安站岗这道题一样,然后交上去WA了. 仔细想想还是有区别的,一个是能看到相邻点,一个是能看到相邻边.对于第一个,可以(u, v)两个点都不放,然而对于这道题就不行了. 不过dp方程更简单:dp[u][0/1]表示u这个点不放/放士兵的最优答案.那么: 不放:则u的所有儿子必须放,才能覆盖所有相邻的边:dp[u][0] = Σdp[v][1] 放:则u的儿子可放可不放:dp[u][1] = Σmin{dp[v][0], dp[v][1]}…
题解 设\(f[u][0/1/2]\)表示当前节点\(u\),放或不放(\(0/1\))时其子树满足题目要求的最小代价,\(2\)表示\(0/1\)中的最小值. 则有: \[ f[u][0]=\sum_{v\in son[u]}f[v][1]\\ f[u][1]=\sum_{v\in son[u]}f[v][2]\\ f[u][2]=min(f[u][0],f[u][1]) \] \(O(n)\)即可 PS:作者在写代码时忘记找根节点了,但是数据太水,默认\(0\)为根节点了.在写这种题时记得寻…
P2016 战略游戏 题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能了望到所有的路. 注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到. 请你编一程序,给定一树,帮Bob计算出他需要放置最少的士兵. 输入输出格式 输入格式: 第一行 N,表示树中结点的数目. 第二行至第N+1行,每行描述每个结点信息,依次为:该结点标号i,k(…
P2016 战略游戏 树形DP 入门题吧(现在怎么是蓝色标签搞不懂): 注意是看见每一条边而不是每一个点(因为这里错了好几次): #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; int pre[maxn],last[maxn],other[maxn],l; void add(int x,int y) { l++; pre[l]=last[x]; last[x]=l…
传送门啦 战略游戏这个题和保安站岗很像,这个题更简单,这个题求的是士兵人数,而保安站岗需要求最优价值. 定义状态$ f[u][0/1] $ 表示 $ u $ 这个节点不放/放士兵 根据题意,如果当前节点不放置士兵,那么它的子节点必须全部放置士兵,因为要满足士兵可以看到所有的边,所以 $ f[u][0]+=f[v][1] $ ,其中$ v $ 是 $ u $ 的子节点 如果当前节点放置士兵,它的子节点选不选已经不重要了(因为树形dp自下而上更新,上面的节点不需要考虑),所以 $ f[u][1]+=…
战略游戏 题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能了望到所有的路. 注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到. 请你编一程序,给定一树,帮Bob计算出他需要放置最少的士兵. 输入输出格式 输入格式: 第一行 N,表示树中结点的数目. 第二行至第N+1行,每行描述每个结点信息,依次为:该结点标号i,k(后面有k条边…
题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能了望到所有的路. 注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到. 请你编一程序,给定一树,帮Bob计算出他需要放置最少的士兵. 输入输出格式 输入格式: 第一行 N,表示树中结点的数目. 第二行至第N+1行,每行描述每个结点信息,依次为:该结点标号i,k(后面有k条边与结点I相…
树形dp的经典例题 题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能了望到所有的路. 注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到. 请你编一程序,给定一树,帮Bob计算出他需要放置最少的士兵. 输入输出格式 输入格式: 第一行 N,表示树中结点的数目. 第二行至第N+1行,每行描述每个结点信息,依次为:该结点标号i,k(后…
题目链接 设f[i][j]表示以节点i为根的子树在状态j的情况下的最优解. j有两种情况. j=1:i这个根节点有士兵在站岗. j=0:i这个根节点没有士兵在站岗. 转移方程很好想. f[x][]+=min(f[to][],f[to][]); f[x][]+=f[to][]; 这样子. 意思就是:如果根节点已经有人站岗了,那么它的直接子节点可站可不站.就从子节点的两种状态中选一个小的. 如果根节点没有人站岗,那它的所有直接子节点都必须站岗,否则会有道路有人看不到. 代码奉上. #include<…