HDU - 1520 树形DP入门题
写了两种DP,第一种是按照自己习惯来xjb敲的,第二种参考别人
熟悉一下树形DP的套路
dp[i][]是维护i及以下的关系最优值的,所以我觉得两次DP记忆搜索之间不清-1应该是正确的(也就做了一次加法)
#include<bits/stdc++.h>
#define rep(i,j,k) for(register int i=j;i<=k;i++)
#define rrep(i,j,k) for(register int i=j;i>=k;i--)
using namespace std;
typedef long long ll;
const int maxn  = 2e5+11;
int dp[maxn][2];
int w[maxn];
bool flag[maxn];
int to[maxn<<1],nxt[maxn<<1],head[maxn],tot;
void init(){memset(head,-1,sizeof head);tot=0;}
void add(int u,int v){
    to[tot]=v;nxt[tot]=head[u];
    head[u]=tot++;
}
int DP(int u,int now){
    if(~dp[u][now]) return dp[u][now];
    int ans=now?w[u]:0;
    for(int i = head[u]; ~i; i = nxt[i]){
        int v=to[i];
        if(now==0) ans+=max(max(DP(v,now),DP(v,now^1)),0);
        else ans+=max(0,DP(v,now^1));
    }
    return dp[u][now]=ans;
}
int DP(int u){
    dp[u][0]=0;
    dp[u][1]=w[u];
    for(int i = head[u]; ~i; i = nxt[i]){
        int v=to[i];
        DP(v);
        dp[u][0]+=max(dp[v][0],dp[v][1]);
        dp[u][1]+=dp[v][0];
    }
    return max(dp[u][0],dp[u][1]);
}
int main(){
    int n,u,v,rt;
    while(scanf("%d",&n)!=EOF){
        init();memset(flag,0,sizeof flag);
        rep(i,1,n) scanf("%d",&w[i]);
        while(scanf("%d%d",&u,&v)!=EOF){
            if(u*v==0)break;
            add(v,u);flag[u]=1;
        }
        rep(i,1,n) if(!flag[i]){
            rt=i;
            break;
        }
        memset(dp,-1,sizeof dp);
        printf("%d\n",max(DP(rt,0),DP(rt,1)));
    }
    return 0;
}
HDU - 1520 树形DP入门题的更多相关文章
- HDU 1520 树形DP入门
		HDU 1520 [题目链接]HDU 1520 [题目类型]树形DP &题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知 ... 
- HDU 1520   树形dp裸题
		1.HDU 1520 Anniversary party 2.总结:第一道树形dp,有点纠结 题意:公司聚会,员工与直接上司不能同时来,求最大权值和 #include<iostream> ... 
- (树形DP入门题)Anniversary party(没有上司的舞会) HDU - 1520
		题意: 有个公司要举行一场晚会.为了让到会的每个人不受他的直接上司约束而能玩得开心,公司领导决定:如果邀请了某个人,那么一定不会再邀请他的直接的上司,但该人的上司的上司,上司的上司的上司等都可以邀请. ... 
- POJ 2342 树形DP入门题
		有一个大学的庆典晚会,想邀请一些在大学任职的人来參加,每一个人有自己的搞笑值,可是如今遇到一个问题就是假设两个人之间有直接的上下级关系,那么他们中仅仅能有一个来參加,求请来一部分人之后,搞笑值的最大是 ... 
- hdu_Anniversary party_(树形DP入门题)
		题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:有N个人,N-1个人有自己的上司,每个人有一个快乐值,如果这个人参加了聚会,那么这个人的直 ... 
- HDU 1561 树形DP入门
		The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ... 
- codevs 1380/HDU 1520  树形dp
		1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 回到问题 题目描述 Description Ural大学有N个职员 ... 
- hdu 1520 (树形DP)
		dp[i][0]表示i不参加 dp[i][1]表示i参加 简单的树形dp #include<stdio.h> #include<string.h> #define N 6100 ... 
- hdu 1520 树形DP基础
		http://acm.hdu.edu.cn/showproblem.php?pid=1520 父节点和子节点不能同时选. http://blog.csdn.net/woshi250hua/articl ... 
随机推荐
- Hadoop完全分布式环境搭建(四)——基于Ubuntu16.04安装和配置Hadoop大数据环境
			[系统环境] [安装配置概要] 1.上传hadoop安装文件到主节点机器 2.给文件夹设置权限 3.解压 4.拷贝到目标文件夹 放在/opt文件夹下,目录结构:/opt/hadoop/hadoop-2 ... 
- Ubuntu下libpcap安装步骤
			第一步,先安装GCC ,一般都会自动安装 sudo apt-get install build-essential 第二步,GNU M4可以从此处ftp.gnu.org/gnu/m4/ 下载 sudo ... 
- laravel的orm增删改查
			增: //通过模型新增 //使用模型的create方法新增数据 删: //通过模型删除 //通过主键删除 改: //通过模型更新数据库 //结合查询语句批量更新 查: 
- 1.SQL
			Qt和数据库之间的操作非常广泛,Qt支持各种开源和商业的数据库. SQL支持和集成了Qt Model/View结构,让你在GUI编程中更加灵活和方便的使用数据库. 
- js日期 操作
			//重写toString方法,将时间转换为Y-m-d H:i:s格式 Date.prototype.toString = function(){ ) + "-" + this.ge ... 
- DataTable 转换成匿名集合类
			using System;using System.CodeDom.Compiler;using System.Collections.Generic;using System.Data;using ... 
- CentOS6.5   Eclipse C++ 版本 OpenCV
			最近在搞Linux上用Eclipse(C++版本)开发 OpenCV,配环境配的那真是配到天昏地暗,不知所措,好在配成功了,期间参考了大量的帖子,所以,特立此贴,希望能给后来人一些小建议! 1.Cen ... 
- python DDT读取excel测试数据
			转自:http://www.cnblogs.com/nuonuozhou/p/8645129.html ddt 结合单元测试一起用 ddt(data.driven.test):数据驱动测试 由外部 ... 
- C#设计模式系列:适配器模式(Adapter Pattern)
			一.引言 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用.但是新环境要求的接口是这些现存对象所不满足的.如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同 ... 
- angular Dom属性绑定
