这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了。

今天我又重新捡了起来。(哈哈1A了)

题意:

没有上司的舞会+判重

思路:

hash一下+树形DP

题目中给的人名hash到数字,再进行运算。

树形DP

f[x][0]+=max(f[x.son][0],f[x.son][1]);

f[x][1]+=f[x.son][0];

f[x][0]表示不选这个节点,f[x][1]表示选这个节点。

如果选了这个节点,那么它的儿子必定不选。

如果不选这个节点,它的儿子们可选可不选 取最大的即可。

然后就是坑爹的判重。

怎么判重呢?

如果n为2的话 肯定是No不用解释了吧

然后就从1到n遍历一遍 如果选这个节点和不选这个节点的人数是一样的就遍历它的儿子 如果有任何一个儿子节点选这个儿子节点和不选这个儿子节点的人数是一样的话 那么就是No

否则就是Yes

// by SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,tot,num,first[205],v[666],next[666],Hash[1000008],jya,jyb,f[666][2];
char a[105],b[105];
void add(int x,int y){v[tot]=y,next[tot]=first[x],first[x]=tot++;}
void dfs(int x){
f[x][1]=1;
for(int i=first[x];~i;i=next[i]){
dfs(v[i]);
f[x][0]+=max(f[v[i]][0],f[v[i]][1]);
f[x][1]+=f[v[i]][0];
}
}
int main(){
st:while(scanf("%d",&n)&&n){
scanf("%s",a);
jya=tot=0;num=1;memset(first,-1,sizeof(first));
memset(f,0,sizeof(f)),memset(Hash,0,sizeof(Hash));
int len=strlen(a);
for(int i=0;i<len;i++)jya=(jya*256+a[i])%1000007;
Hash[jya]=1;
for(int i=1;i<n;i++){
scanf("%s%s",a,b);
int lena=strlen(a),lenb=strlen(b);jya=jyb=0;
for(int i=0;i<lena;i++)jya=(jya*256+a[i])%1000007;
if(!Hash[jya])Hash[jya]=++num;
for(int i=0;i<lenb;i++)jyb=(jyb*256+b[i])%1000007;
if(!Hash[jyb])Hash[jyb]=++num;
add(Hash[jyb],Hash[jya]);
}
if(n==2){puts("1 No");goto st;}
dfs(1);
printf("%d ",max(f[1][0],f[1][1]));
for(int i=1;i<=n;i++)
if(f[i][0]==f[i][1])
for(int j=first[i];~j;j=next[j])
if(f[v[j]][0]==f[v[j]][1]){puts("No");goto st;}
puts("Yes");
}
}

POJ 3342 树形DP+Hash的更多相关文章

  1. BZOJ_3573_[Hnoi2014]米特运输_树形DP+hash

    BZOJ_3573_[Hnoi2014]米特运输_树形DP+hash 题意: 给你一棵树每个点有一个权值,要求修改最少的权值,使得每个节点的权值等于其儿子的权值和且儿子的权值都相等. 分析: 首先我们 ...

  2. Fire (poj 2152 树形dp)

    Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000).现在要选择某些点,使得整棵树都被覆盖到.当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同 ...

  3. poj 1463(树形dp)

    题目链接:http://poj.org/problem?id=1463 思路:简单树形dp,如果不选父亲节点,则他的所有的儿子节点都必须选,如果选择了父亲节点,则儿子节点可选,可不选,取较小者. #i ...

  4. poj 2486( 树形dp)

    题目链接:http://poj.org/problem?id=2486 思路:经典的树形dp,想了好久的状态转移.dp[i][j][0]表示从i出发走了j步最后没有回到i,dp[i][j][1]表示从 ...

  5. poj 3140(树形dp)

    题目链接:http://poj.org/problem?id=3140 思路:简单树形dp题,dp[u]表示以u为根的子树的人数和. #include<iostream> #include ...

  6. Strategic game(POJ 1463 树形DP)

    Strategic game Time Limit: 2000MS   Memory Limit: 10000K Total Submissions: 7490   Accepted: 3483 De ...

  7. POJ 2342 树形DP入门题

    有一个大学的庆典晚会,想邀请一些在大学任职的人来參加,每一个人有自己的搞笑值,可是如今遇到一个问题就是假设两个人之间有直接的上下级关系,那么他们中仅仅能有一个来參加,求请来一部分人之后,搞笑值的最大是 ...

  8. poj 3345 树形DP 附属关系+输入输出(好题)

    题目连接:http://acm.hust.edu.cn/vjudge/problem/17665 参考资料:http://blog.csdn.net/woshi250hua/article/detai ...

  9. POJ 1155 树形DP

    题意:电视台发送信号给很多用户,每个用户有愿意出的钱,电视台经过的路线都有一定费用,求电视台不损失的情况下最多给多少用户发送信号. 转自:http://www.cnblogs.com/andre050 ...

随机推荐

  1. java.lang.ClassNotFoundException: org.objectweb.asm.ClassWriter

    转自:https://www.cnblogs.com/yfceshi/p/6814802.html Caused by: javax.xml.ws.WebServiceException: java. ...

  2. 关于ubuntu中文输入调用不出来的解决办法,具体如正文。

    卸载了 fcitx sudo apt-get remove fcitx 重启 sudo reboot 重新安装 fcitxsudo apt-get install fcitx 安装拼音输入法sudo ...

  3. BI中事实表与维度表的定义

    一个典型的例子是,把逻辑业务比作一个立方体,产品维.时间维.地点维分别作为不同的坐标轴,而坐标轴的交点就是一个具体的事实.也就是说事实表是多个维度表的一个交点.而维度表是分析事实的一个窗口. 首先介绍 ...

  4. w3c css参考网址

    Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification(http://www.w3.org/TR/CSS22/) <层 ...

  5. Console.WriteLine 不会输出到unity控制台

    1,Console.WriteLine() 是输出到控制台程序(console application)的命令 2,Unity中控制台是一个独立的程序,要想输出到Unity控制台需要使用Debug.L ...

  6. ZBrush如何把不同材质赋予同一个模型上

    ZBrush 作为最专业的数字雕刻与绘画软件,能够制作出高质量的3D模型,包括模型的颜色贴图和材质属性.不同材质可以改变照明在表面上的反应,以便模型表现出光泽.凹凸.反射.金属性或透明效果.ZBrus ...

  7. 使用 Shiro 设计基于用户、角色、权限的通用权限管理系统

    一.前言 在大型的信息管理系统中,经常涉及到权限管理系统 下面来个 demo,很多复杂的系统的设计都来自它 代码已经放到github上了,地址:https://github.com/larger5/s ...

  8. node——文件写入,文件读取

    ru //实行文件操作 //文件写入 //1.加载文件操作,fs模块 var fs = require('fs'); //2.实现文件写入操作 var msg='Hello world'; //调用f ...

  9. [转载] Linux新手必看:浅谈如何学习linux

    本文转自 https://www.cnblogs.com/evilqliang/p/6247496.html 本文在Creative Commons许可证下发布 一.起步 首先,应该为自己创造一个学习 ...

  10. 小试牛刀之sort()排序的实现

    受大学室友的鼓动,我也打算利用公众平台来记录自己的前端知识积累,同时呢,自己总结的东西,总归会有局限性,希望小伙伴能给我指点迷津.知识就是一张巨大的网,作为一名摸不清头绪的入学者,唯一能做的事情就是吐 ...