hdu 2412 树形DP
思路:对于最大的人数很容易想到,就直接dp。但对于最大值是否唯一就需要应用辅助数组,isOnly[i][0]表示dp[i][0]是否唯一,同理isOnly[i][1]。
那么当(dp[v][0]>dp[v][1]&&isOnly[v][0]==0)或(dp[v][1]>dp[v][0]&&isOnly[v][1]==0)或(dp[v][1]==dp[v][0]),那么isOnly[u][0]=0;
如果isOnly[v][0]==0,那么isOnly[u][1]=0;
- #include<iostream>
- #include<cstring>
- #include<algorithm>
- #include<cstdio>
- #include<vector>
- #include<map>
- #define Maxn 210
- using namespace std;
- int vi[Maxn],dp[Maxn][],n,isOnly[Maxn][];
- vector <int> head[Maxn];
- map <string,int> q;
- void init()
- {
- memset(vi,,sizeof(vi));
- memset(dp,,sizeof(dp));
- for(int i=;i<=n;i++)
- head[i].clear();
- q.clear();
- }
- void add(int u,int v)
- {
- head[u].push_back(v);
- head[v].push_back(u);
- }
- void dfs(int u)
- {
- int i,v,sz;
- vi[u]=;
- sz=head[u].size();
- dp[u][]=;
- dp[u][]=;
- isOnly[u][]=isOnly[u][]=;
- for(i=;i<sz;i++)
- {
- v=head[u][i];
- if(vi[v]) continue;
- dfs(v);
- dp[u][]+=dp[v][];
- dp[u][]+=max(dp[v][],dp[v][]);
- if(dp[v][]>dp[v][]&&isOnly[v][]==) isOnly[u][]=;
- else if(dp[v][]>dp[v][]&&isOnly[v][]==) isOnly[u][]=;
- else if(dp[v][]==dp[v][]) isOnly[u][]=;
- if(isOnly[v][]==) isOnly[u][]=;
- }
- }
- int main()
- {
- int i,j,cnt=;
- char str1[Maxn],str2[Maxn];
- while(scanf("%d",&n),n)
- {
- cnt=;
- init();
- scanf("%s",&str1);
- q[str1]=++cnt;
- for(i=;i<n;i++)
- {
- scanf("%s%s",&str1,&str2);
- if(!q[str1])
- q[str1]=++cnt;
- if(!q[str2])
- q[str2]=++cnt;
- add(q[str1],q[str2]);
- }
- dfs();
- if(dp[][]>dp[][]&&isOnly[][])
- printf("%d Yes\n",dp[][]);
- else
- if(dp[][]>dp[][]&&isOnly[][])
- printf("%d Yes\n",dp[][]);
- else
- printf("%d No\n",max(dp[][],dp[][]));
- }
- return ;
- }
hdu 2412 树形DP的更多相关文章
- hdu 4123 树形DP+RMQ
http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...
- HDU 1520 树形dp裸题
1.HDU 1520 Anniversary party 2.总结:第一道树形dp,有点纠结 题意:公司聚会,员工与直接上司不能同时来,求最大权值和 #include<iostream> ...
- HDU 1561 树形DP入门
The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 2196树形DP(2个方向)
HDU 2196 [题目链接]HDU 2196 [题目类型]树形DP(2个方向) &题意: 题意是求树中每个点到所有叶子节点的距离的最大值是多少. &题解: 2次dfs,先把子树的最大 ...
- HDU 1520 树形DP入门
HDU 1520 [题目链接]HDU 1520 [题目类型]树形DP &题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知 ...
- codevs 1380/HDU 1520 树形dp
1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 回到问题 题目描述 Description Ural大学有N个职员 ...
- HDU 5834 [树形dp]
/* 题意:n个点组成的树,点和边都有权值,当第一次访问某个点的时候获得利益为点的权值 每次经过一条边,丢失利益为边的权值.问从第i个点出发,获得的利益最大是多少. 输入: 测试样例组数T n n个数 ...
- hdu 4267 树形DP
思路:先dfs一下,找出1,n间的路径长度和价值,回溯时将该路径长度和价值清零.那么对剩下的图就可以直接树形dp求解了. #include<iostream> #include<al ...
- hdu 4607 (树形DP)
当时比赛的时候我们找出来只要求出树的最长的边的节点数ans,如果要访问点的个数n小于ans距离直接就是n-1 如果大于的话就是(n-ans)*2+ans-1,当时求树的直径难倒我们了,都不会树形dp ...
随机推荐
- 一个word合并项目的分布式架构设计
一个word合并项目的分布式架构设计 项目背景与问题起源 我们要给一个客户做word生成报告以及报告合并的工作,要合并的报告非常多,而且每个报告也比较大,一个多的报告大概有200页以上.我们用c#操作 ...
- poj 2349 Arctic Network
http://poj.org/problem?id=2349 Arctic Network Time Limit: 2000MS Memory Limit: 65536K Total Submis ...
- mysql一些写常用命令
参见pcttcnc2007博客腾飞 1.mysql的status信息命令: mysql> show global status; 2.可以列出mysql服务器运行各种状态值,另外,查询mysql ...
- BestCoder Round #65 hdu5591(尼姆博弈)
ZYB's Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- [C语言 - 3] 字符串
字符数组 char * 看做一个特殊的字符数组, 在字符串结束为止添加'\0'结束符 (ASCII码0), 没有\0结尾的是普通的字符数组. 使用双引号定义的字符串自动在尾部加上\0 puts(s)函 ...
- Linux定时执行任务命令概述:at和crontab
本文介绍在Linux下的两种定时执行任务的方法:at命令,以及crontab服务. (1)at命令 假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了. 设置at命令很简单,指示定 ...
- 汇总:Linux下svn命令大全
svn(subversion)是近年来崛起的版本管理工具,svn服务器有2种运行方式:独立服务器和借助apache.2种方式各有利弊.不管是那种方式,都需要使用各种命令来实现.在本文中,haohtml ...
- 开发WebForm时遇到的问题
在做一个小项目时,一个很长的页面,页面底部有一个contact us form 整个页面我没有使用MVC,而是使用ASP.NET WebForm(.aspx)来实现,实现功能后发现,当用户在页面底部输 ...
- Oracle数据库如何授权收费(Database Licensing)
Oracle软件本身是免费的,所以任何人都可以从Oracle官方网站下载并安装Oracle的数据库软件,收费的是License,即软件授权,如果数据库用于商业用途,就需要购买相应Oracle产品的Li ...
- [AngularJS] $http cache
By default your HTTP requests with the $https service in Angular are not cached. By setting some opt ...