题目链接:

https://vjudge.net/problem/UVA-1220

题意:

题解:

树形dp: 树的最大独立集问题
d[u][0]:=不选u能得到的最大人数 d[u][0]=sum{max(d[v][0],d[v][1]}
d[u][1]:=选u能得到的最大人数 d[u][1]=sum{d[v][0]}
判断唯一性就是看当前点的孩子是不是不唯一的。初始唯一

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define MS(a) memset(a,0,sizeof(a))
#define MP make_pair
#define PB push_back
const int INF = 0x3f3f3f3f;
const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
inline ll read(){ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
//
const int maxn = 1e5+10;int n,cnt;
map<string,int> mp;
string s1,s2;
int d[300][2],f[300][2];vector<int> g[300];int ID(string s){if(!mp.count(s)) mp[s] = cnt++;return mp[s];
}int dp(int u,int k){d[u][k] = k;f[u][k] = 1;for(int i=0; i<(int)g[u].size(); i++){int v = g[u][i];if(k == 1){d[u][k] += dp(v,0);if(!f[v][0]) f[u][k]=0;}else{d[u][k] += 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(){while(scanf("%d",&n) && n){cnt = 0;for(int i=0; i<=n; i++) g[i].clear();mp.clear();cin >> s1;ID(s1);for(int i=1; i<n; i++){cin >> s1 >> s2;g[ID(s2)].push_back(ID(s1));}int ans = max(dp(0,0),dp(0,1));cout << ans << " ";bool unique = true;if(d[0][0] == d[0][1]) unique=false;if(d[0][0]>d[0][1] && !f[0][0]) unique=false;if(d[0][1]>d[0][0] && !f[0][1]) unique=false;if(unique) puts("Yes");else puts("No");}return 0;
}

转载于:https://www.cnblogs.com/yxg123123/p/6827583.html

紫书动规 例题9-13 UVA - 1220 Party at Hali-Bula 树形dp相关推荐

  1. 紫书动规 例题9-10 UVA - 1626 Brackets sequence 区间dp

    题目链接: https://vjudge.net/problem/UVA-1626 题意: 题解: dp[i][j]:= i~j需要最少的括号 区间dp: dp[i][j] = min(dp[i][j ...

  2. 11行代码AC——比紫书优化,例题2-3 近似计算——解题报告

    励志用更少的代码做高效的表达 题意: 计算π/4 = 1 - 1/3 + 1/5 - 1/7 + -,直到最后一项小于10^-6. 思路分析: 本题很简单,因此计算重心从解题转化为优化. 本题为重复计 ...

  3. 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 ...

  4. 比紫书优化,14行代码AC——例题 5-7 丑数(Ugly Numbers,UVa 136)——解题报告

    题意: 丑数是一些因子只有2,3,5的数.数列1,2,3,4,5,6,8,9,10,12,15--写出了从小到大的前11个丑数,1属于丑数.现在请你编写程序,找出第1500个丑数是什么. 没有输入 输 ...

  5. 紫书例题6-5 UVa 12657 (链表

    唉 这道题是省赛选拔的最后一场的原题啊 当时要是仔细翻翻紫书,就直接大一能去省赛了唉,可惜了 代码对着紫书抄的的 (写的正好 这里写代码片

  6. UVa 1339,紫书P73,词频

    题目链接:https://uva.onlinejudge.org/external/13/1339.pdf 紫书P73 解题报告: #include <stdio.h> #include ...

  7. UVa 11062 Andy's Second Dictionary(刘汝佳紫书升级题)

    在介绍这道题之前,先介绍一下紫书里面和这道题很像的一道题: 紫书P112页 的例题5-3 安迪的第一个字典(Andy's First Dictionary UVa 10815) 原题链接如下: And ...

  8. UVA 1025 紫书练习题 动态规划

    好吧,做例题总是这样,莫名其妙的WA,然后莫名其妙的AC... 关键的部分紫书上已经说得很清楚了,剩下的就是确定has_train这个数组,我觉得确定这个数组也不是难事吧..把数据范围看清楚,然后看看 ...

  9. UVa 紫书百题留念

    终于把紫书刷完一百道了,按教主说的,反正首先这个诚意是有了,可以在机房分配座位了. 从2014.10.12开始112天了,总算结束了这个任务了.. 总感觉之前刷题过于追求题数,有的题其实还没理解就跟着 ...

最新文章

  1. ViewPager 设置间距的方法
  2. Aria2打造属于自己的下载神器
  3. 转-iOS开发系列--地图与定位
  4. 欢迎来怼---作业要求 20171015 beta冲刺贡献分分配规则
  5. 热冗余冷冗余_冗余支架
  6. 信佑无盘主服务器密码,(信佑无盘帮助手册.doc
  7. web中生成水平树状结构的方法.
  8. 通过SQL直接插入、修改ArcGIS SDE空间表中的数据
  9. 陈天奇的tvm更新了:VTA,开源AI芯片栈
  10. Cisco 静态NAT、动态NAT配置
  11. vue中用echats绘制中国地图
  12. Ubuntu18.04安装PX4并与ROS联合实验
  13. linux 桥,Linux网桥
  14. win10系统如何设置局域网服务器,win10系统如何设置局域网共享
  15. 希捷硬盘无法连接计算机,新买的希捷1T移动硬盘在电脑上没法识别
  16. simulink半桥逆变电路仿真
  17. MFC设置窗体背景图片的办法
  18. 单片机学习笔记-数码管的显示
  19. C++设计模式之工厂模式
  20. 【Win32多线程】异步I/O技术(Overlapped I/O),避免使用多线程

热门文章

  1. linux 使用Xshell连接SQL数据库
  2. Map集合遍历的三种方式
  3. 2015年七大科技趋势前瞻
  4. 【Linux命令】tar 压缩、解压
  5. 有关刀削面面馆营业的思考
  6. LTS 轻量级分布式任务调度框架(Light Task Scheduler)
  7. 博客访问量破万了,纪念一下
  8. 【转】GitHub 排名前 100 的安卓、iOS项目简介
  9. 360在线无插件直播html,360直播高清版
  10. EDA大作业——交通灯