UVA - 1220 Party at Hali-Bula (树形DP)
有 n 个员工,n-1个从属关系。
不能同时选择某个员工和他的直接上司,问最多可以选多少人,以及选法是否唯一。

树上的最大独立集问题。只不过多了一个判断唯一性。
dp[u][0]表示不选这个点的状态,dp[u][1]表示选这个点的状态。
如果不选 u, 那么 u点状态是由 dp[v][0] 或者 dp[v][1],大的那个点转移过来,唯一性同时也转移。
如果选 u , 那么 u点状态是由所有的 dp[v][0] 转移过来,所以只有所有的 dp[v][0]状态的都唯一时,dp[u][1]才唯一。
另外,我一直 WA 的原因在于给员工编号的时候没有判断有没有出现过,默认每行的第一个都是没有出现过的。瞎改了好久。
吸取教训。
#include <bits/stdc++.h>
using namespace std;
#define maxn 100010 vector<int> son[maxn], fa[maxn];
int same[maxn], dp[maxn][], f[maxn][]; void DP(int k)
{
dp[k][] = , dp[k][] = ; f[k][] = , f[k][] = ;
for (int i = ; i < son[k].size(); i++)
{
int v = son[k][i];
DP(v); dp[k][] += max(dp[v][], dp[v][]); if (dp[v][] == dp[v][]) f[k][] = ;
if (dp[v][] > dp[v][] && f[v][] == ) f[k][] = ;
if (dp[v][] < dp[v][] && f[v][] == ) f[k][] = ; dp[k][] += dp[v][];
if (f[v][] == ) f[k][] = ;
}
} void init(int n)
{
for (int i = ; i < n; i++)
son[i].clear();
memset(f, , sizeof());
} int main()
{
int n;
while(~scanf("%d", &n) && n)
{
init(n);
map<string, int> idx;
string s;
cin >> s;
idx[s] = ;
int id = ; for (int i = ; i <= n-; i++)
{
string x, y;
cin >> x >> y;
if (!idx.count(x))
idx[x] = ++id;
if (!idx.count(y))
idx[y] = ++id;
son[idx[y]].push_back(idx[x]);
} DP(); int uniq = ;
if (dp[][] > dp[][] && f[][] == ) uniq = ;
else if (dp[][] < dp[][] && f[][] == ) uniq = ;
else if (dp[][] == dp[][]) uniq = ; printf("%d %s\n", max(dp[][], dp[][]), uniq ? "Yes":"No");
}
}
UVA - 1220 Party at Hali-Bula (树形DP)的更多相关文章
- UVa 1220 - Party at Hali-Bula(树形DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 1220 Party at Hali-Bula (树形DP,最大独立集)
题意:公司有 n 个人形成一个树形结构,除了老板都有唯一的一个直系上司,要求选尽量多的人,但不能同时选一人上和他的直系上司,问最多能选多少人,并且是不是唯一的方案. 析:这个题几乎就是树的最大的独立集 ...
- 【UVA 1380】 A Scheduling Problem (树形DP)
A Scheduling Problem Description There is a set of jobs, say x1, x2,..., xn <tex2html_verbatim_ ...
- UVA Live Archive 4015 Cave (树形dp,分组背包)
和Heroes Of Might And Magic 相似,题目的询问是dp的一个副产物. 距离是不好表示成状态的,但是可以换一个角度想,如果知道了从一个点向子树走k个结点的最短距离, 那么就可以回答 ...
- UVa 10859 - Placing Lampposts 树形DP 难度: 2
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- UVA - 1218 Perfect Service(树形dp)
题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连 ...
- 树形DP UVA 1292 Strategic game
题目传送门 /* 题解:选择一个点,它相邻的点都当做被选择,问最少选择多少点将所有点都被选择 树形DP:dp[i][0/1]表示当前点选或不选,如果选,相邻的点可选可不选,取最小值 */ /***** ...
- uva 1292 树形dp
UVA 1292 - Strategic game 守卫城市,城市由n个点和n-1条边组成的树,要求在点上安排士兵,守卫与点相连的边.问最少要安排多少士兵. 典型的树形dp.每一个点有两个状态: dp ...
- UVA 1484 - Alice and Bob's Trip(树形DP)
题目链接:1484 - Alice and Bob's Trip 题意:BOB和ALICE这对狗男女在一颗树上走,BOB先走,BOB要尽量使得总路径权和大,ALICE要小,可是有个条件,就是路径权值总 ...
随机推荐
- JavaSE---ThreadLocal
1.Java为线程安全提供了工具类,如ThreadLocal等: 2.ThreadLocal类是一个 线程局部变量 ,通过将 ”数据“ 放在ThreadLocal中,即可在每条线程中创建一个 ...
- abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一)
在前面我已经介绍了ASP.NET MVC.ASP.NET Razor.WEBAPI等技术.我准备通过一个实践项目来整体应用一下之前介绍的技术.本系列是介绍基于ABP+EasyUI的Web开发框架的形成 ...
- plsql过期注册
Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqzserial Number:601769password:xs374ca 打开plsql工具 点击注册即可
- 第一课:K线
1 K线是根据价格走势中形成的四个价位(开盘价.收盘价.最高价.最低价)绘制而成的.K线是最基本的描述股价涨跌的表现符号(记录某种股票一天的价格变动情况). K线构造的四个价格因素:开盘价 ...
- elasticsearch查询方式
1.query string a).GET /index/type/_search ===>>查询所有 b).GET /index/type/_search?q=filed:value&a ...
- MySQL如何找出未提交事务信息
前阵子,我写了一篇博客"ORACLE中能否找到未提交事务的SQL语句", 那么在MySQL数据库中,我们能否找出未提交事务执行的SQL语句或未提交事务的相关信息呢? 实验验证了一下 ...
- 备份和导入Outlook 2016 电子邮件签名
在本文中,我将分享您在Outlook 2013和Outlook 2016中备份或导入签名的过程 在清除Outlook配置文件之前,请确保您通过在文件资源管理器中的配置文件中的APPDATA文件夹中复制 ...
- Java之栈空间和堆空间
1.变量的命名 (1)由字母,数字和下划线构成,首字母以字母或下划线开头 (2)变量的命名遵循见名知义 (3)Java变量命名建议不用中文 (4)变量名首字母建议不用大写字母开头 (5)用驼峰命名法命 ...
- C# 向服务器上传文件(客服端winform、服务端web)
转载 首先写客服端,winform模拟一个post提交: /// <summary> /// 将本地文件上传到指定的服务器(HttpWebRequest方法) /// </summa ...
- jsp之初识UserBean
package com.java.model; public class Student { private String name; private int age; public String g ...