题目链接: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 = +;
int cnt;
int n;
vector<int> sons[maxn];
int d[maxn][],f[maxn][]; 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] = ;
d[u][k] = k;
for(int i=;i<sons[u].size();i++) {
int v = sons[u][i];
if(k==) {
d[u][] +=dp(v,);
if(!f[v][]) f[u][] = ;
}
else {
d[u][] +=max(dp(v,),dp(v,));
if(d[v][]==d[v][]) f[u][k] = ;
else if(d[v][]>d[v][]&&!f[v][]) f[u][k] = ;
else if(d[v][]>d[v][]&&!f[v][]) f[u][k] = ;
}
}
return d[u][k];
} int main()
{
string s,s2;
while(cin>>n>>s) {
cnt = ;
dict.clear(); for(int i=;i<n;i++)
sons[i].clear(); ID(s);
for(int i=;i<n-;i++) {
cin>>s>>s2;
sons[ID(s2)].push_back(ID(s));
} printf("%d ",max(dp(,),dp(,)));
bool unique = false;
if(d[][]>d[][]&&f[][]) unique = true;
if(d[][]>d[][]&&f[][]) unique = true;
if(unique) printf("Yes\n");
else printf("No\n"); } return ;
}

Uva 1220,Hali-Bula 的晚会的更多相关文章

  1. UVa 1220 Party at Hali-Bula 晚会

    #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #i ...

  2. POJ 3342 Party at Hali-Bula / HDU 2412 Party at Hali-Bula / UVAlive 3794 Party at Hali-Bula / UVA 1220 Party at Hali-Bula(树型动态规划)

    POJ 3342 Party at Hali-Bula / HDU 2412 Party at Hali-Bula / UVAlive 3794 Party at Hali-Bula / UVA 12 ...

  3. UVa 1220 Hali-Bula的晚会(树的最大独立集)

    https://vjudge.net/problem/UVA-1220 题意: 公司里有n个人形成一个树状结构,即除了老板以外每个员工都有唯一的直属上司.要求选尽量多的人,但不能同时选择一个人和他的直 ...

  4. uva 1220

    1220 - Party at Hali-Bula Time limit: 3.000 seconds Dear Contestant, I'm going to have a party at my ...

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

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

  6. UVa 1220 (树的最大独立集) Party at Hali-Bula

    题意: 有一棵树,选出尽可能多的节点是的两两节点不相邻,即每个节点和他的子节点只能选一个.求符合方案的最大节点数,并最优方案判断是否唯一. 分析: d(u, 0)表示以u为根的子树中,不选u节点能得到 ...

  7. UVA - 1220 Party at Hali-Bula 树的最大独立集

    题意:  给定n个人,存在上下级关系,每个人只有一个上级,求最大独立集.并判断最大独立集是否唯一 思路:d[i][0]表示以i为根的子树中,不选择第i个节点的最大独立集,f[i][0]表示以i为根的子 ...

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

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

  9. UVA - 1220 Party at Hali-Bula (树形DP)

    有 n 个员工,n-1个从属关系. 不能同时选择某个员工和他的直接上司,问最多可以选多少人,以及选法是否唯一. 树上的最大独立集问题.只不过多了一个判断唯一性. dp[u][0]表示不选这个点的状态, ...

随机推荐

  1. HTML语言的一些元素(三)

    本章节主要介绍:<div>和<span> 可以通过 <div> 和 <span> 将 HTML 元素组合起来. HTML <div> 元素是 ...

  2. Swift实战-豆瓣电台(三)获取网络数据

    观看地址:http://v.youku.com/v_show/id_XNzMwMzQxMzky.html 这节内容,我们先说了怎么将storyboard中的组件在类中进行绑定.然后写了一个类用来获取网 ...

  3. JSP out乱码

    在form method="post" 写post 在接受页面jsp代码前面加request.setCharacterEncoding("UTF-8");

  4. 手动写的第一个eChart代码

    手动写的第一个eChart代码 ,第一感觉,杂乱无章 <!doctype html> <html> <head> <meta charset="UT ...

  5. paper 57 :颜色直方图的代码

    clear clc close all Image = imread('29.jpg');[M,N,O] = size(Image);[h,s,v] = rgb2hsv(Image); H = h;  ...

  6. paper 45:latex的使用

    本教程面向对LaTeX完全无认知无基础的新人. 旨在让新人能够用最简单快捷的方式,轻松入门,能够迅速使用LaTeX完成基本的文本编辑. 尤其旨在破除部分新人对LaTeX在传闻中难以学习的恐惧感. 在入 ...

  7. DDR3简介(一)

    JEDEC成立于1958年,作为电子产业协会联盟(EIA)的一部分,为新兴的半导体产业制定标准.主要功能包括术语定义,产品特征描述,测试方法,固态存储器,DRAM,闪存卡及射频识别标签等的确定与标准化 ...

  8. DB2 Unload 的时候遇到B37-04

    B37-04的问题是每个Mainframer首先会遇到的问题,在Unload的时候最大的可能性是Extend次数到16次了,这时候只要加大primary或secondary就可以了,我最常用的是pri ...

  9. OpenGL拾取注意事项

    GLFrame框架本身不支持拾取,需要自己实现.以下代码是实现拾取功能的注意事项: void Test::doSelection(int xPos, int yPos) { GLfloat aspec ...

  10. Controller 接口控制器详解

    Controller 控制器,是 MVC 中的部分 C,为什么是部分呢?因为此处的控制器主要负责功能处理部分:1.收集.验证请求参数并绑定到命令对象:2.将命令对象交给业务对象,由业务对象处理并返回模 ...