链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3338 题意: 某公司里有一个老板和n(n≤1e5)个员工组成树状结构,除了老板之外每个员工都有唯一的直属上司.老板的编号为0,员工编号为1-n.工人们(即没有直接下属的员工)打算签署一项请愿书递给老板,但是不能跨级递,只能递给直属上司.当一个中级员工(不是工人的员工)的直属下属中不…
思路:dp[i]表示让上司i签字至少需要多少工人签字.       转移方程:将i的所有节点根据所需工人数量升序排序,设i需要k个下属签字,dp[i] = sum{dp[v]| 0 <= v <k} AC代码: #include<cstdio> #include<algorithm> #include<cstring> #include<utility> #include<string> #include<iostream>…
思路:dp[i][0]表示i是服务器:dp[i][1]表示i不是服务器,但它的父节点是服务器:dp[i][2]表示i和他的父亲都不是服务器.       转移方程: d[u][0] += min(d[v][0], d[v][1]); d[u][1] += d[v][2]; for(int i = 0; i < n; ++i) {       int v= son[u][i];       if(v == pre) continue;       d[u][2] = min(d[u][2], d[…
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3659 题意: 有n(n≤10000)台机器形成树状结构.要求在其中一些机器上安装服务器,使得每台不是服务器的计算机恰好和一台服务器计算机相邻.求服务器的最少数量. 分析: 按照每个结点的情况进行分类:一.d(u,0):u是服务器,则每个子结点可以是服务器也可以不是.二.d(u,1)…
求一棵数的最大独立集结点个数并判断方案是否唯一. dp[i][j]表示以i为根的子树的最大独立集,j的取值为选和不选. 决策: 当选择i时,就不能选择它的子结点. 当不选i时,它的子结点可选可不选. 判断唯一性:当选择的某个子节点方案不唯一,父节点的方案就不唯一,或者某个子节点选或不选方案数一样. 转移顺序:按照拓扑序转移或dfs都可以. #include<bits/stdc++.h> using namespace std; ; ; ; ]; ];// NotUnique? int fa[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…
题目 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,单点点亮边数为…
题目链接: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 **********************…
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],…