POJ_3342_Party at Hali-Bula_树形DP

题意:直接上司和本人不能同时参加,求最多参加人数,并回答是否唯一解。

分析:常规树形DP,需要再维护一下选/不选当前点取得最大值时是否为唯一解。

就是在转移时判断该状态是从哪转移过来的,最后答案同理。

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 220
#define mem(x) memset(x,0,sizeof(x))
int head[N],to[N<<1],nxt[N<<1],flg,cnt,n;
int f[N],g[N],h[N],d[N];
char ch[N][N],a[N],b[N];
void add(int u,int v)
{
to[++cnt]=v;
nxt[cnt]=head[u];
head[u]=cnt;
}
void dfs(int x,int y)
{
f[x]=1;d[x]=h[x]=1;
for(int i=head[x];i;i=nxt[i])
{
if(to[i]!=y)
{
dfs(to[i],x);
f[x]+=g[to[i]];
g[x]+=max(g[to[i]],f[to[i]]);
if(g[to[i]]>f[to[i]]&&d[to[i]]==0)d[x]=0;
else if(g[to[i]]<f[to[i]]&&h[to[i]]==0)d[x]=0;
else if(g[to[i]]==f[to[i]])d[x]=0;
if(d[to[i]]==0)h[x]=0;
}
}
}
int main()
{
while(scanf("%d",&n))
{
if(!n)break;
mem(d);mem(h);mem(f);mem(g);mem(head);
cnt=0;flg=0;
scanf("%s",ch[1]);
int now=1;
for(int i=1;i<n;i++)
{
scanf("%s%s",a,b);
int na=0,nb=0;
for(int j=1;j<=now;j++)
{
if(strcmp(ch[j],a)==0)
{
na=j;
}
if(strcmp(ch[j],b)==0)
{
nb=j;
}
}
if(!na)
{
na=++now;
strcpy(ch[now],a);
}
if(!nb)
{
nb=++now;
strcpy(ch[now],b);
}
add(na,nb);
add(nb,na);
}
dfs(1,0);
printf("%d ",max(f[1],g[1]));
if(f[1]==g[1])flg=1;
if(f[1]>g[1]&&h[1]==0)flg=1;
if(f[1]<g[1]&&d[1]==0)flg=1;
puts(flg?"No":"Yes");
}
}

POJ_3342_Party at Hali-Bula_树形DP的更多相关文章

  1. 树形DP 复习

    树形DP 树形DP:建立在树上的动态规划 一般有两种传递方式:根→叶或叶→根 前者出现在换根DP中,一般操作是求出某一个点的最优解,再通过这一个点推知其他点的最优解. 后者是树形DP的常见形式,一般树 ...

  2. poj3417 LCA + 树形dp

    Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4478   Accepted: 1292 Descripti ...

  3. COGS 2532. [HZOI 2016]树之美 树形dp

    可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话d ...

  4. 【BZOJ-4726】Sabota? 树形DP

    4726: [POI2017]Sabota? Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 128  Solved ...

  5. 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)

    题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...

  6. 树形DP

    切题ing!!!!! HDU  2196 Anniversary party 经典树形DP,以前写的太搓了,终于学会简单写法了.... #include <iostream> #inclu ...

  7. BZOJ 2286 消耗战 (虚树+树形DP)

    给出一个n节点的无向树,每条边都有一个边权,给出m个询问,每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接.最少的边权和是多少.(n<=250000,sigma(ki)<= ...

  8. POJ2342 树形dp

    原题:http://poj.org/problem?id=2342 树形dp入门题. 我们让dp[i][0]表示第i个人不去,dp[i][1]表示第i个人去 ,根据题意我们可以很容易的得到如下递推公式 ...

  9. hdu1561 The more, The Better (树形dp+背包)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1561 思路:树形dp+01背包 //看注释可以懂 用vector建树更简单. 代码: #i ...

随机推荐

  1. sudoku solver(数独)

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  2. centos6-7克隆主机网卡无法启动问题

    1,centos6和redhat6左右的版本  第一,先找到网卡的mac地址,将其配置在配置文件中,重新启动网卡. 故障产生的原因: 由于克隆虚拟机,vmware只是修改了虚拟机的名字等信息,并没有修 ...

  3. neo4j-rest-client使用摘要

    1.使用它的原因,与django搭配的最好的neomodel目前只支持到v2.2,我已给官方发了issue,官方也回复了,马上修改并发布(老外对开源项目的负责态度让人感动) 2.这个库的文档中大概描述 ...

  4. Java基础知识总结【转+整合】

    写代码: 1.明确需求.自己要做什么? 2.分析思路.怎么做? 3.确定步骤.每个思路部分用到哪些语句,方法和对象. 4.代码实现.用具体的java语言代码把思路体现出来. 学习新技术的四点: 1,该 ...

  5. 蚂蚁 RPC 框架 SOFA-RPC 初体验

    前言 最近蚂蚁金服开源了分布式框架 SOFA,楼主写了一个 demo,体验了一下 SOFA 的功能,SOFA 完全兼容 SpringBoot(当然 Dubbo 也是可以兼容的). 项目地址:Alipa ...

  6. GitHub学习笔记:分支管理

    GitHub对于每个开发版本都需要有一个分支,默认的分支是master往往被大家保留下来作为主分支,分支类似于进程的一个指针,往往在master这个稳定的主干版本上分出一个或多个正在开发的分支版本,开 ...

  7. DataTime显示格式【转】

    随心所欲的DateTime显示格式 任何项目,难免会碰到DateTime的显示问题,.net框架虽提供丰富多样的显示方法,但我很少使用,因老忘记细节,每次都要纠结到底月份在前还是年份在前:日期分隔符到 ...

  8. 【转】Javascript全局变量var与不var的区别

    相信你对全局变量一定不陌生,在函数作用域里用a=1这种形式定义的变量会是一个全局变量,在全局作用域里,用下面3种形式都可以创建对全局可见的命名: <script> var a = 1; b ...

  9. Flask入门之触发器,事件,数据迁移

    SQLAlchemy Core和SQLAlchemy ORM都具有各种各样的事件挂钩: 核心事件 - 这些在 Core Events中描述,并包括特定于连接池生命周期,SQL语句执行,事务生命周期以及 ...

  10. spring boot之从零开始开发自己的网站

    概述 首先要感谢两位大神,该项目的想法来源自tale和MyBlog,本项目的想法. 做了一些改造,增加了一些功能和一些代码的重构,并且更换了博客主题. 关于项目,对于开发的练手项目,能够工程化,严谨一 ...