题目链接:https://uva.onlinejudge.org/external/12/1220.pdf

题意: 公司n个人,形成一个数状结构,选出最大独立集,并且看是否是唯一解。

分析:

d(i) 是 节点 i 的最优值, i 只有两种决策,就是选和不选。 转移方程:

d(i) = max {1+Σ1d(j),Σ2d(j)}; Σ1是所有孙子节点,Σ2是所有儿子节点。

那么状态的定义d(i,0),节点 i 不选,d(i,1),节点 i 选。

那么状态转移方程就是:

是否唯一 f(v,0) = 1 表示唯一, f(v,1) = 0 不唯一。

d(u,1) = sum{d(v,0)}(v是u的子节点),当所有 f(v,0) = 1,d(u,1) = 1;

d(u,0) = sum{max(d(v,0),d(v,1))}, if (d(v,0)==d(v,1)) f(u,0) = 0,取的对应的f()==0,f(u,0) = 0;

存树形结构,一个较好的方式用邻接表,每个字符串对应一个ID,可以用map<string,int>dict,有一个较好的函数,dict.count(s),s字符串出现的次数。

#include <bits/stdc++.h>
using namespace std;const int maxn = 200+5;
int cnt;
int n;
vector<int> sons[maxn];
int d[maxn][2],f[maxn][2];map<string,int> dict;int ID(const string &s) {if(!dict.count(s)) dict[s] = cnt++;return dict[s];
}int dp(int u,int k) {f[u][k] = 1;d[u][k] = k;for(int i=0;i<sons[u].size();i++) {int v = sons[u][i];if(k==1) {d[u][1] +=dp(v,0);if(!f[v][0]) f[u][1] = 0;}else {d[u][0] +=max(dp(v,0),dp(v,1));if(d[v][0]==d[v][1]) f[u][k] = 0;else if(d[v][0]>d[v][1]&&!f[v][0]) f[u][k] = 0;else if(d[v][1]>d[v][0]&&!f[v][1]) f[u][k] = 0;}}return d[u][k];
}int main()
{string s,s2;while(cin>>n>>s) {cnt = 0;dict.clear();for(int i=0;i<n;i++)sons[i].clear();ID(s);for(int i=0;i<n-1;i++) {cin>>s>>s2;sons[ID(s2)].push_back(ID(s));}printf("%d ",max(dp(0,0),dp(0,1)));bool unique = false;if(d[0][0]>d[0][1]&&f[0][0]) unique = true;if(d[0][1]>d[0][0]&&f[1][0]) unique = true;if(unique) printf("Yes\n");else printf("No\n");}return 0;
}

View Code

转载于:https://www.cnblogs.com/TreeDream/p/6002006.html

Uva 1220,Hali-Bula 的晚会相关推荐

  1. UVA 1220 Hali-Bula的晚会

    题目描述:https://vjudge.net/problem/UVA-1220 判断一个图是否是树:一个图G如果是无回路的连通图,或者是n-1条边的连通图,那么G就是树.树上的DP类问题一般用深度优 ...

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

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

  3. uva 1220——Party at Hali-Bula

    题意:公司里n个人,要举办一场party,但是到场的人不能碰到他的直隶上司,问最多能到场多少人. 思路:树形dp,就是求在树上的最大独立集合,加唯一性特判.dp(u,0)表示不选u点的条件最大人数,k ...

  4. UVA 1220 Party at Hali-Bula (树状DP+记忆化搜索)

    Dear Contestant, I'm going to have a party at my villa at Hali-Bula to celebrate my retirement from ...

  5. 【Uva 1220】Party at Hali-Bula

    [Link]:https://cn.vjudge.net/contest/170078#problem/M [Description] 求一个树的最大独立子集; (即树的一个点集,这个点集中任意两个点 ...

  6. Party at Hali-Bula UVA - 1220

    https://cn.vjudge.net/problem/UVA-1220 求最大独立集就是裸题 主要是判唯一 dp[i][0]代表不选i的最大独立集 dp[i][1]代表选i book[i][0] ...

  7. 紫书动规 例题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 ...

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

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

  9. Party at Hali-Bula(树形DP+判断方案数是否唯一)

    Party at Hali-Bula UVA - 1220 题意:  公司里有n(n<=200)个人形成一个树状结构, 要求尽量选多的人,但不能同时选择一个人和他的直属上司,文最多能选多少人,以 ...

最新文章

  1. ERROR: epmd error for host 192: badarg (unknown POSIX error)
  2. java获取keyvault_利用KeyVault来加强存储Azure Storage访问密钥管理
  3. attempted relative import beyond top-level package
  4. 程序员赴美经验谈:本科应届 Kevin - 弗罗里达州 Oracle
  5. 大表ddl工具online-schema-change使用
  6. Linux 命令[2]:mkdir
  7. 脚本应用实例_Selenium自动化中无头浏览器的应用
  8. 三段式状态机_Verilog实战篇(5)——FIFO amp; 状态机
  9. MFC 教程【10_内存分配方式和调试机制 】
  10. asp.net core 系列 5 MVC框架路由(上)
  11. C语言函数一章教学,c语言案例教程:函数教学讲义.ppt
  12. 【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置***帧以及动画创建!【二】...
  13. matlab的hilbert变换的实现
  14. 文档处理 - 复杂Excel文档
  15. 软件工程考研复试、工作面试常见问题及答案
  16. 3D游戏案例:滚动天空(超低配版)
  17. 云端转型突破临界点,金蝶云加速企业云服务落地
  18. 《Linux篇》超详细安装FinalShell并连接Linux教程
  19. HTML5个人简历模板制作
  20. 试验设计方法与Design-Expert软件应用目录

热门文章

  1. 《仙剑奇侠传online》游戏后台优化分析:CPU、内存与启动时间
  2. 【MySQL】查看MySQL配置文件路径及相关配置
  3. [Oracle]如何在亿级记录表中创建索引
  4. oracle错误号大全(查询ora错误号以及解决方法技巧)
  5. java学习笔记30(IO :缓冲流)
  6. 《追风行动》有点儿意思
  7. 浏览器工作原理(四):浏览器事件解读
  8. [poj] 2749 building roads
  9. epoll实现压测工具
  10. Objective-C:OC内部可变对象和不可变对象的深(复制)拷贝问题思考: