有 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)的更多相关文章

  1. UVa 1220 - Party at Hali-Bula(树形DP)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  2. UVa 1220 Party at Hali-Bula (树形DP,最大独立集)

    题意:公司有 n 个人形成一个树形结构,除了老板都有唯一的一个直系上司,要求选尽量多的人,但不能同时选一人上和他的直系上司,问最多能选多少人,并且是不是唯一的方案. 析:这个题几乎就是树的最大的独立集 ...

  3. 【UVA 1380】 A Scheduling Problem (树形DP)

    A Scheduling Problem   Description There is a set of jobs, say x1, x2,..., xn <tex2html_verbatim_ ...

  4. UVA Live Archive 4015 Cave (树形dp,分组背包)

    和Heroes Of Might And Magic 相似,题目的询问是dp的一个副产物. 距离是不好表示成状态的,但是可以换一个角度想,如果知道了从一个点向子树走k个结点的最短距离, 那么就可以回答 ...

  5. UVa 10859 - Placing Lampposts 树形DP 难度: 2

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

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

    题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连 ...

  7. 树形DP UVA 1292 Strategic game

    题目传送门 /* 题解:选择一个点,它相邻的点都当做被选择,问最少选择多少点将所有点都被选择 树形DP:dp[i][0/1]表示当前点选或不选,如果选,相邻的点可选可不选,取最小值 */ /***** ...

  8. uva 1292 树形dp

    UVA 1292 - Strategic game 守卫城市,城市由n个点和n-1条边组成的树,要求在点上安排士兵,守卫与点相连的边.问最少要安排多少士兵. 典型的树形dp.每一个点有两个状态: dp ...

  9. UVA 1484 - Alice and Bob&#39;s Trip(树形DP)

    题目链接:1484 - Alice and Bob's Trip 题意:BOB和ALICE这对狗男女在一颗树上走,BOB先走,BOB要尽量使得总路径权和大,ALICE要小,可是有个条件,就是路径权值总 ...

随机推荐

  1. 前端开发如何做好SEO优化的工作

    前端开发工程师不仅需要要跟视觉设计师.交互式设计师配合,完美还原设计图稿,编写兼容各大浏览器.加载速度快.用户体验好的页面.现在还需要跟SEO人员配合,调整页面的代码结构和标签. 一些成熟的平台,在开 ...

  2. springmvc的DispatcherServlet源码——doDispatch方法解析

    DispatcherServlet的doDispatch方法主要用作职责调度工作,本身主要用于控制流程,主要职责如下: 1.文件上传解析,如果请求类型是multipart将通过MultipartRes ...

  3. JAVA 员工管理系统(用抽象类实现),简易版。

    package Demo513; /* 定义一个Employee类,该类包含: private 成员变量name,number,birthday,其中birthday为MyDate类的对象: abst ...

  4. log4j.properties配置详情

    log4j: log for java 是Apache的一个开源项目! 00.将我们的日志信息,输出到指定的位置(控制台   文件中) 01.我们可以控制每一条日志的输出格式 02.我们设置日志信息的 ...

  5. 中介者模式和php实现

    中介者模式: 中介者模式(Mediator Pattern)定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互.中介者模 ...

  6. 排序算法C语言实现

    大学有一门课程叫做数据结构,严蔚敏的课本,其中详细介绍了集中经典的排序算法,学习复习反复几次,但是直到现在仍然只记得名字了,所以想记录下来,随时复习直至牢记于心.经常面试的朋友知道,排序算法在面试中出 ...

  7. 洛谷 U3348 A2-回文数

    题目背景 方方方很喜欢回文数,于是就有了一道关于回文数的题目. 题目描述 求从小到大第n(1<=n<=10^18)个回文数. 注释:出题人认为回文数不包括0. 输入输出格式 输入格式: 一 ...

  8. 爬去豆瓣图书top250数据存储到csv中

    from lxml import etree import requests import csv fp=open('C://Users/Administrator/Desktop/lianxi/do ...

  9. ABAP Development Tools的语法高亮实现原理

    ABAP Development Tools的前端是Java,根本识别不了ABAP.那么在ADT里的ABAP语法高亮是如何实现的? 第一次打开一个report时,显示在ADT里的代码是没有任何语法高亮 ...

  10. Android视图控件架构分析之View、ViewGroup

    在Android中,视图控件大致被分为两类,即ViewGroup和View,ViewGroup控件作为父控件,包含并管理着子View,通过ViewGroup和View便形成了控件树,各个ViewGou ...