dp[i][0]表示以i为根的且i被选为服务器的最小服务器数
dp[i][1]表示以i为根且i不被选为服务器,而i父亲为服务器的最小服务器数
dp[i][2]表示以i为根且i不被选为服务器,而i父亲也不被选为服务器的最小服务器数
dp[i][0] = Sum(max(dp[j][0],dp[j][1]) + 1
dp[i][1] = Sum(dp[j][2])
dp[i][2] = min(dp[i][1] - dp[j][2] + dp[j][0])

#include<bits/stdc++.h>
#define debug(x) cout<<#x<<" is "<<x<<endl
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define DBG 0
const int N = 1e4 + 5;
typedef long long ll;
const int INF = 1e5 + 5;
const ll LLINF = (1LL<<60);
using namespace std;
const int mod = 998244353;
ll fast_pow(ll a,ll b){ll ans = 1;while(b){if(b&1)ans = (ans * a)%mod;a = (a * a)%mod;b>>=1;}return (ans%mod);
}
typedef pair<int,int> pii;
int n;
vector<int> g[N];
int dp[N][3];
void dfs(int u,int f){if(g[u].size() == 1 && g[u][0] == f){return;}for(int i = 0;i < g[u].size();i++){int v = g[u][i];if(v == f)continue;dfs(v,u);dp[u][0] += min(dp[v][0],dp[v][1]);//dp[u][0] += 1;dp[u][1] += dp[v][2];}for(int i = 0;i < g[u].size();i++){int v = g[u][i];if(v == f)continue;dp[u][2] = min(dp[u][1] - dp[v][2] + dp[v][0],dp[u][2]);}}
int main(){//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);
#if DBGfreopen("input.txt","r",stdin);
#endifwhile(cin>>n){for(int i = 1;i <= n;i++){g[i].clear();dp[i][0] = 1,dp[i][1] = 0; dp[i][2] = INF;}for(int i = 1;i <= n - 1;i++){int u,v;scanf("%d%d",&u,&v);g[u].pb(v);g[v].pb(u);}int end;scanf("%d",&end);dfs(1,-1);int ans = min(dp[1][0],dp[1][2]);//debug(ans);printf("%d\n",ans);if(end == -1)break;}return 0;
}

[树形DP | Uva 1218]Perfect Service相关推荐

  1. uva 1218 Perfect Service 树形dp

    // uva 1218 Perfect Service 树形dp // // 解题思路: // // d[u][0]表示节点本身是服务器 // d[u][1]表示节点的父节点是服务器 // d[u][ ...

  2. UVA - 1218 Perfect Service(树形dp)

    题目链接:UVA - 1218 Perfect Service 题意 有n台电脑,互相以无根树的方式连接,现要将其中一部分电脑作为服务器,且要求每台电脑必须连接且只能连接一台服务器(不包括作为服务器的 ...

  3. uva 1218——Perfect Service

    题意:有n个机器组成的树形结构,要求一台服务器必须连接一台电脑,求使用的最少的服务器.. 思路: 树形DP,和前面的有道题目类似.在dfs遍历树的时候找到选当前结点和不选当前节点的最大状态,多一个两个 ...

  4. Perfect service(树形dp)

    Perfect service(树形dp) 有n台机器形成树状结构,要求在其中一些机器上安装服务器,使得每台不是服务器的计算机恰好和一台服务器计算机相邻.求服务器的最小数量.n<=10000. ...

  5. uva 10859 放置街灯树形dp

    首先,本题的优化目标有两个:放置的街灯a应该尽量少:被两灯同时照亮的边数b应该尽量大.为了统一起见,我们把后者替换为:恰好被一盏灯照亮的边数c应该尽量小,然后改用x = Ma+c作为优化目标,其中一个 ...

  6. 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings

    题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...

  7. Party at Hali-Bula UVA - 1220(树形dp)

    题目链接:传送门 思路:求最多参与人数是树形dp的入门题,和没有上司的舞会是一个题目,但是这个题目还要求答案是否唯一.我们开设一个标记数组vis,标记就可以了.具体解释看代码: #include< ...

  8. 紫书动规 例题9-13 UVA - 1220 Party at Hali-Bula 树形dp

    题目链接: https://vjudge.net/problem/UVA-1220 题意: 题解: 树形dp: 树的最大独立集问题 d[u][0]:=不选u能得到的最大人数 d[u][0]=sum{m ...

  9. 【学时总结】◆学时·VIII◆ 树形DP

    ◆学时·VIII◆ 树形DP DP像猴子一样爬上了树--QwQ ◇ 算法概述 基于树的模型,由于树上没有环,满足DP的无后效性,可以充分发挥其强大统计以及计算答案的能力. 一般来说树形DP的状态定义有 ...

最新文章

  1. 024_JDK的equals方法
  2. 关于pygame和tkinter窗口的那件事-线程
  3. stateless_Spring Stateless State Security第3部分:JWT +社会认证
  4. python乱码怎么办_python中输出中文乱码怎么解决
  5. 互联网上最可怕的女人
  6. c++ 实现outlook itemsend_2021智能C端冬季科创训练营作业已发布,请注意查收~
  7. C# 计算一点绕另一点旋转一定角度后新点的坐标
  8. 给创业者们推荐一个好的工具
  9. Java知识积累——参数个数可变的函数(Varargs)
  10. Anaconda中安装pygame
  11. 个人项目集 - Oliver Chu
  12. 成都中忻嘉业:抖音小店经营一段时间后能改类目吗
  13. 网站劫持原理及分析网站被劫持了有几种解决方法
  14. IP地址,IPV4与IPV6
  15. 水面倒影风格的LOGO在线做
  16. 移动端h5框架自适应_Html5移动端页面自适应百分比布局
  17. WMI Provider Host(wmiprvse.exe)占用CPU高的解决方案
  18. 交易中的 “道“ 与 “术“
  19. 域AD策略屏蔽USB驱动
  20. 中兴a2018刷android,中兴A2018刷机教程_中兴A2018 天机7S卡刷升级更新官方系统

热门文章

  1. Android Studio Flavors详解
  2. 宜信实时数据平台介绍
  3. html多级列表不连续如何显示,完美解决word多级列表的编号不显示问题
  4. 学计算机做纸质笔记,电脑诞生这么久,为什么你还是喜欢在纸上做笔记
  5. Kafka动态认证SASL/SCRAM验证
  6. jsp 页面传值 到后台 中文乱码解决方法
  7. 重磅出炉!中国高校人工智能专业综合排名榜单
  8. matlab筛选excel数据统计,#excel筛选数据#如何用excel表格中的数据制图
  9. arttemplate+ajax 转 vue
  10. mysql explain参数_MySQL命令 Explain参数说明