题目链接:点击查看

题目大意:n个人参加聚会,每个人都不想和老板一起参加,问最多可以有多少个人参加,并且判断方案唯一性

题目分析:这个类型的题目这已经是第三个了,状态转移方程都一模一样,不过这个题有点不同的地方是需要判断唯一性,我看到网上有两种方法,一种是通过状态转移的过程中如果发现dp[v][1]==dp[v][0]就设置一个flag为false,即在这个地方就出现了分歧,因为想起来和写起来都比较容易实现这里就不过多赘述了,我还学到了另一个方法,是利用一个vis数组存储dp数组转移而来的时候是否唯一,然后相继传递,具体的详见注释,上代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<sstream>
#include<cmath>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=210;map<string,int>mp;vector<int>node[N];int dp[N][2];bool vis[N][2];void dfs(int u)
{dp[u][0]=0;dp[u][1]=1;vis[u][1]=vis[u][0]=true;for(int i=0;i<node[u].size();i++){int v=node[u][i];dfs(v);dp[u][1]+=dp[v][0];dp[u][0]+=max(dp[v][1],dp[v][0]);//观察这两个转移方程,然后根据转移方程来传递唯一性if(dp[v][1]==dp[v][0])//如果相等,则是分歧点,由此传递上去的dp[u][0]的唯一性也受到影响vis[u][0]=false;if(dp[v][1]>dp[v][0]&&!vis[v][1])//如果dp[u][0]是由dp[v][1]传递上去的,则vis[u][0]与vis[v][1]有关vis[u][0]=false;if(dp[v][0]>dp[v][1]&&!vis[v][0])//如果dp[u][0]是由dp[v][0]传递上去的,则vis[u][0]与vis[v][0]有关vis[u][0]=false;if(!vis[v][0])//因为dp[u][1]只能由dp[v][0]传递而来,所以vis[u][1]只与vis[v][0]有关vis[u][1]=false;}
}int main()
{
//  freopen("input.txt","r",stdin);int n;int cnt;while(scanf("%d",&n)!=EOF&&n){for(int i=1;i<=n;i++)node[i].clear();cnt=1;mp.clear();string root;cin>>root;mp[root]=cnt++;for(int i=1;i<n;i++){string u,v;cin>>v>>u;if(!mp[u])mp[u]=cnt++;if(!mp[v])mp[v]=cnt++;node[mp[u]].push_back(mp[v]);}dfs(1);cout<<max(dp[mp[root]][1],dp[mp[root]][0])<<' ';bool flag=true;if(dp[mp[root]][1]>dp[mp[root]][0]&&!vis[mp[root]][1])flag=false;if(dp[mp[root]][1]<dp[mp[root]][0]&&!vis[mp[root]][0])flag=false;if(dp[mp[root]][1]==dp[mp[root]][0])flag=false;if(flag)cout<<"Yes"<<endl;elsecout<<"No"<<endl;}return 0;
}

POJ - 3342 Party at Hali-Bula(树形dp)相关推荐

  1. POJ 2342 | HDU 1520 Anniversary party 树形DP(入门题)

    传送门:POJ 2342 题目大意: 有若干人参加一个聚会,如果两个人之间有直接的上下属关系,则只能去一个.每个人都有个高兴值,问高兴值之和最大是多少? 思路: 之前一直觉得树形DP比较难,现在发现树 ...

  2. 【POJ - 1947】Rebuilding Roads (树形dp,背包问题,树形背包dp)

    题干: The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, number 1. ...

  3. 【POJ - 2378】Tree Cutting(树形dp,树的重心变形)

    题干: After Farmer John realized that Bessie had installed a "tree-shaped" network among his ...

  4. POJ 1848 (一道不错的树形dp)

    题意:N个点的一颗树.问最少添加多少条边可以让每个点都在一个(且仅一个)环中. 不得不佩服,这题dp设计出来的人...偶是弱菜,只能膜拜了. 这位大牛的解说,很详细:http://hi.baidu.c ...

  5. POJ 1655 求树的重心(树形dp)

    题目链接 树的重心: 若树上的一个节点满足其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心. 1.任选一个点为根,只要统计出每个点的子树大小,就能很快求出每个点子树节点的数量的最大值. ...

  6. pku 1463 Strategic game 树形DP

    http://poj.org/problem?id=1463 对于树形DP不大来感啊,才开始做的时候考虑成覆盖全部点了,致使我拓扑做了,WA了好几次.感觉是树形DP好像以前做过类似的题目可是就是想不出 ...

  7. POJ 3342 树形DP+Hash

    这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...

  8. POJ 1155 TELE【树形DP】

    POJ 1155 TELE http://poj.org/problem?id=1155 大意:某电台要广播一场比赛,该电台网络是由N个网点组成的一棵树,其中M个点为客户端, 其余点为转发站.客户端i ...

  9. Fire (poj 2152 树形dp)

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

  10. POJ 1655 Balancing Act[树的重心/树形dp]

    Balancing Act 时限:1000ms Description Consider a tree T with N (1 <= N <= 20,000) nodes numbered ...

最新文章

  1. shell 开机自动执行_windows还能这么玩?开机自动念情书
  2. adchos 文本混淆工具
  3. mysql 5.0 5.1_mysql从5.0升级到5.1
  4. go语言游戏编程-Ebiten实现画面的填充
  5. Aizu 2170 Marked Ancestor
  6. 还在发愁linux命令记不住吗?神器来了!
  7. python idls_Python argparse模块实现模拟 linux 的ls命令
  8. HDOJ1005(找循环节点)
  9. 凸优化第二章凸集 2.6 对偶锥与广义不等式
  10. 正版sql sever(2000,2005,2008) 下载地址
  11. 《穿越计算机的迷雾》读书笔记
  12. 为什么Android项目mainactivity中有一个变量R_教我兄弟学Android逆向12 编写xpose模块...
  13. 升级Spring Boot 2.x后RelaxedPropertyResolver不可用的解决方案
  14. python图片保存pdf_python将JPG图片转换为PDF
  15. Matlab许可证过期解决办法
  16. t20171215a1BILL的账单
  17. KeyDown,KeyPress和KeyUp详解
  18. 安装包的时候出现:No such file or directory: google_pasta-0.2.0.dist-info\\METADATA
  19. 物联网操作系统HelloX V1.83发布公告
  20. 声网电话面试的总结,技术面, 声网20min(c/c++算法工程化类职位) (一面通过拿到实习offer)

热门文章

  1. 构造器Constructor是否可被override
  2. CountDownLatch.countDown
  3. 关联查询的延迟加载是怎么实现的?
  4. Redis高可用方案-公私混合云
  5. Hive的基本操作-表结构修改和数据加载
  6. Hive的安装-Mysql安装
  7. 微服务 Docker和DevOps
  8. Fegion-4解决Fegion第一次请求timeout的问题
  9. mysql二进制日志格式对复制的影响
  10. JAVA取模(取余)公式