hdu 1520Anniversary party(简单树形dp)

hdu 1520Anniversary party(简单树形dp)

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Anniversary party

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4310    Accepted Submission(s): 1976




Problem Description
There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The University has a hierarchical structure of employees. It means that the supervisor relation forms a tree rooted at the rector V. E. Tretyakov. In order to make the party funny for every one, the rector does not want both an employee and his or her immediate supervisor to be present. The personnel office has evaluated conviviality of each employee, so everyone has some number (rating) attached to him or her. Your task is to make a list of guests with the maximal possible sum of guests’ conviviality ratings.

 


Input
Employees are numbered from 1 to N. A first line of input contains a number N. 1 <= N <= 6 000. Each of the subsequent N lines contains the conviviality rating of the corresponding employee. Conviviality rating is an integer number in a range from -128 to 127. After that go T lines that describe a supervisor relation tree. Each line of the tree specification has the form: 

L K 

It means that the K-th employee is an immediate supervisor of the L-th employee. Input is ended with the line 

0 0
 


Output
Output should contain the maximal sum of guests’ ratings.

 


Sample Input
   
   
7 1 1 1 1 1 1 1 1 3 2 3 6 4 7 4 4 5 3 5 0 0

 


Sample Output
   
   
5

 


Source
 


Recommend
linle   |   We have carefully selected several similar problems for you:  
1561 
1011 
2196 
1494 
2242 
 


题目大意:给你一颗树,是人际关系树,然后互为上下级的(父子节点)的不能同一时候选中。

解题思路:树形dp,任意从一个点開始扩展,把周围全部节点的dp都解决出来,然后加上去就可以。

用dp[i][0]表示不选中i号,周围的都能够选的最大值,dp[i][1]表示选中i号,那么周围都不能选的最大值。
则

dp[i][0]+=(dp[j][1],dp[j][0])

dp[i][1]+=dp[j][0]

i和j相邻,而且在求i的时候从j扩展的都已经求出来。


详见代码:


AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<vector>
using namespace std;
const int maxn=6005;

vector<int> mq[maxn];
int dp[maxn][2];

void dfs(int cur,int p)
{
    int i,nex;
    for(i=0;i<mq[cur].size();i++)
    {
        nex=mq[cur][i];
        if(nex==p) continue;

        dfs(nex,cur);  //先找从cur这个点能够扩展的dp
        dp[cur][0]+=max(dp[nex][0],dp[nex][1]);
        dp[cur][1]+=dp[nex][0];
    }
}

int main()
{
    int n,i;
    int a,b;

    while(~scanf("%d",&n))
    {
        memset(dp,0,sizeof(dp));
        for(i=1;i<=n;i++)
        {
            mq[i].clear();
            scanf("%d",&dp[i][1]);
        }

        while(scanf("%d%d",&a,&b)&&(a+b))
        {
            mq[a].push_back(b);
            mq[b].push_back(a);
        }

        dfs(1,0);

        int ans=max(dp[1][0],dp[1][1]);
        printf("%d\n",ans);
    }

    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118610.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • mysql重启服务命令_重启mysql命令

    mysql重启服务命令_重启mysql命令一、MYSQL服务我的电脑——(右键)管理——服务与应用程序——服务——MYSQL——开启(停止、重启动)二、命令行方式Windows1.点击“开始”->“运行”(快捷键Win+R)。2.启动:输入netstopmysql3.停止:输入netstartmysql提示*RedhatLinux也支持servicecommand,启动:#servicemysqldstar…

    2022年7月17日
  • js中moment方法_jquery 虚拟dom

    js中moment方法_jquery 虚拟domvue项目中,需要把moment.js挂载到全局上(即vue的原型链上),访问时直接使用this.moment();vue项目中不挂载到全局,单文件(单组件)使用:==>>importmomentfrom”moment”;然后直接使用moment()1.初始化日期/时间初始化日期:moment().for…

    2022年9月5日
  • FilterDispatcher已被标注为过时解决办法 >>> FilterDispatcher <<< is deprecated!

    FilterDispatcher已被标注为过时解决办法 >>> FilterDispatcher <<< is deprecated!一些struts2的教程都是比较早的,当我们基于较新版本的struts2来实现代码的时候,往往会出现一些问题.比如这个警告:FilterDispatcherisdeprecated!在web.xml中的配置如下:<filter><filter-name>struts2</filter-name><…

    2022年8月16日
  • 微信小程序获取openid返回40029的一种错误情况

    微信小程序获取openid返回40029的一种错误情况微信小程序返回40029的情况原因有很多,遇到后大概总结了几个已知的1.小程序里传到后台的code被微信的调用接口使用了两次(只能使用一次)2.appid、AppSecret的值不对(这个自己复制感觉一般不会错)3.自己遇到的最难受的原因:创建项目的appid跟你请求url里的appid、AppSecret不是同一组起因:刚开始学习的时候,自己注册了一个小程序账号,第一个项目用的这…

    2022年6月4日
  • pycharm-professional-2021.12.13激活【2021.10最新】

    (pycharm-professional-2021.12.13激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html23EQQJJI0G-eyJsaWN…

    2022年3月30日
  • c语言字符数组拼接

    c语言字符数组拼接废话不多说,直接上代码#include<stdio.h>#include<string.h>voidmystrcat(chara[],charb[]){inti,j;//计数a[]个数ifor(i=0;i<strlen(a);i++);//这地方比较繁琐,可不写,直接i=strlen…

    2022年6月10日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号