UVA 10859 树形DP】的更多相关文章

很明显的树形DP了,设状态dp[i][0],dp[i][1].枚举子节点放或不放的两种状态. 在此学到一种不同于一般处理的方法,题目要求被两灯照亮的边尽量多,反过来即被一灯照亮的尽量少设为e.又需要的灯尽量少设为v. 设M是一个很大的数,则M*v+e即是所求.由于M很大,所以主导作用取决于v,只要v不同M*v+e一定不会相同.当v相同,被一灯照亮的尽量少即v此时发挥作用.所以DP时只需要保存这种状态即可. #include <iostream> #include <cstdio>…
UVA 1292 - Strategic game 守卫城市,城市由n个点和n-1条边组成的树,要求在点上安排士兵,守卫与点相连的边.问最少要安排多少士兵. 典型的树形dp.每一个点有两个状态: dp[t][i]表示t节点在i状态下其所在的子树所有的边都被守卫的最少士兵数量. 有士兵守卫和没有士兵守卫.假设有士兵守卫.其子节点的状态随意. 假设没有士兵.子节点必须所有都有士兵守卫. dp[t][0] = sum{dp[ti][1]}; dp[t][1] = sum{min(dp[t1][0],…
题意  分析   白皮书 P282  例题9-12 AC代码 #include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <sstream> #include <algorithm> #include <string> #include <queue>…
这道题还是比较简单的,对于当前节点,算出每个儿子需要的人数 然后再算出当前节点需要多少个人数,然后排个序加上去就好了. #include<cstdio> #include<vector> #include<algorithm> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; const int MAXN = 112345; vector<int> son[…
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1800 题意 n(n < 1000)个节点m条边的无向无环无重边图,最小顶点覆盖的同时要尽量让只有一个端点是点亮的边数最少 思路 如刘书: 1. 无向无环图一定是森林,适用树形DP 2. 因为有两个优化目标,所以将两个目标线性组合,设以i为根的树上的顶点覆盖数为x,单点点亮边数为…
题意:给定一个无向,无环,无多重边,要求找出最少的若干点,使得,每条边之中至少有一个点上有街灯.在满足上述条件的时候将还需要满足让两个点被选择的边的数量尽量多. 题解: 对于如何求解最小的节点数目这点,实际上有些想法,“是不是应当认为来一发BFS,之后强行染色招最小的会好呢?”但是这样就会很容易发现一个误区——染色方案被强行确定了..而这个其实是不能够直接确定为两种的. 因而,应当使用树形dp.应当想将整棵树转化为一个有根树.在转换的过程当中进行动态规划: 对于每个节点,首先都必然可以选择在该点…
题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连接且仅仅能连接一台server(不包含作为server的电脑).求最少须要多少台电脑作为server. 思路 典型的树形dp问题,那么我们来建立模型. d(u,0):u是server,孩子是不是server均可 d(u,1):u不是server,u的父亲是server,u的孩子不能是server d(u,2)…
题目传送门 /* 题解:选择一个点,它相邻的点都当做被选择,问最少选择多少点将所有点都被选择 树形DP:dp[i][0/1]表示当前点选或不选,如果选,相邻的点可选可不选,取最小值 */ /************************************************ * Author :Running_Time * Created Time :2015-8-12 10:54:05 * File Name :UVA_1292.cpp **********************…
题目链接:1484 - Alice and Bob's Trip 题意:BOB和ALICE这对狗男女在一颗树上走,BOB先走,BOB要尽量使得总路径权和大,ALICE要小,可是有个条件,就是路径权值总和必须在[L,R]之间,求终于这条路径的权值. 思路:树形dp,dp[u]表示在u结点的权值,往下dfs的时候顺带记录下到根节点的权值总和,然后假设dp[v] + w + sum 在[l,r]内,就是能够的,状态转移方程为 dp[u] = max{dp[v] + w }(bob) dp[u] = m…
转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Series-Parallel Networks Input: standard input Output:  standard output Time Limit: 5 seconds Memory Limit: 32 MB In this problem you are expected to count two-terminal series-parallel networ…