hdu 1520

树形dp

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <string>
#include <vector>
#include <list>
#include <map>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <numeric>
#include <functional>
using namespace std;
#define LL long long
#define DB double
#define N 100005
const int INF = 0x3f3f3f3f;
const LL INFF = 1LL << 60;
const DB EPS = 1e-9;
const DB OO = 1e15;
const DB PI = acos(-1.0);
int val[N],dp[N][2],f[N];
vector<int>G[N];
void dfs(int rt)
{
    int i,len = G[rt].size();
    dp[rt][1] = val[rt];
    for(i = 0 ; i < len ; i++)
        dfs(G[rt][i]);
    for(i = 0 ; i < len ; i++)
    {
        dp[rt][0]+=max(dp[G[rt][i]][0],dp[G[rt][i]][1]);
        dp[rt][1]+=dp[G[rt][i]][0];
    }
}
int main()
{
    int n,i,j,a,b;

    while(~scanf("%d",&n))
    {
        memset(G,0,sizeof(G));
        for(i = 1 ; i <= n ; i++)
        {
            scanf("%d",&val[i]);
            f[i] = -1;
            dp[i][0] = dp[i][1] = 0;
        }
        while(scanf("%d %d",&a,&b),a+b)
        {
            f[a] = b;
            G[b].push_back(a);
        }
        a = 1;
        while(f[a]!=-1) a = f[a];
        dfs(a);
        printf("%d\n",max(dp[a][0],dp[a][1]));
    }
    return 0;
}

hdu 1520

时间: 2024-10-09 01:07:46

hdu 1520的相关文章

HDU 1520 树形dp裸题

1.HDU 1520  Anniversary party 2.总结:第一道树形dp,有点纠结 题意:公司聚会,员工与直接上司不能同时来,求最大权值和 #include<iostream> #include<cstring> #include<cmath> #include<queue> #include<algorithm> #include<cstdio> #define max(a,b) a>b?a:b using nam

HDU 1520 Anniversary party 树DP水题

非常水的树DP,状态为当前为i,上级来没来 然后跑一遍记忆化搜索即可 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #include <cstdlib>

HDU 1520 Anniversary party

http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意: 将有一个党庆祝乌拉尔国立大学80周年.大学有一个员工的层次结构.这意味着监督关系形成了一个树根源于校长VE Tretyakov.为了使党对每个人都有趣,主任不想让一个雇员和他或她的直接主管在场.人事局已评估每个员工的欢乐性,所以每个人都有一定数量(评级)附加到他或她.你的任务是制作一个客人的列表,其中有最大可能的客人的欢乐度评分的总和. 思路: 这道题目就是UVa 1220的减弱版,比较基本的树

HDU 1520:Anniversary party 树形DP基础

Anniversary party 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意: 公司里有一堆人再开派对,每个人有一个欢乐值,这些人之间有一些上下级关系,每个人都不想和他的直接上司(即是父亲,不包括祖先)同时出现在party上,求party上最大的欢乐值的合. 题解: 由题意知公司成员之间可以组成一棵关系树,设value[x]为以x为根节点的子树的最大权值合,child[x]为x的子节点,从树上可以看出,value[x]=max

HDU 1520.Anniversary party 基础的树形dp

Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12770    Accepted Submission(s): 5142 Problem Description There is going to be a party to celebrate the 80-th Anniversary of the

POJ 2342 &amp;&amp;HDU 1520 Anniversary party 树形DP 水题

一个公司的职员是分级制度的,所有员工刚好是一个树形结构,现在公司要举办一个聚会,邀请部分职员来参加. 要求: 1.为了聚会有趣,若邀请了一个职员,则该职员的直接上级(即父节点)和直接下级(即儿子节点)都不能被邀请 2.每一个员工都有一个兴奋值,在满足1的条件下,要使得邀请来的员工的兴奋值最高 输出最高的兴奋值. 简单的树形DP dp[i][1]:表示以i为根的子树,邀请节点i的最大兴奋值 dp[i][0]:表示以i为根的子树,不邀请节点i的最大兴奋值 先根据入度找出整棵树的根节点, 然后一次DF

hdu 1520 Anniversary party(第一道树形dp)

传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 16376    Accepted Submission(s): 6241 Problem Description There is going to

HDU 1520 &amp; POJ 2342 Anniversary party(树形dp)

Anniversary party Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u 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 em

poj 2342 &amp;&amp; hdu 1520 树形dp

题意:有n个人,接下来n行是n个人的价值,再接下来n行给出l,k说的是l的上司是k,这里注意l与k是不能同时出现的 链接:点我 dp[i][1] += dp[j][0], dp[i][0] += max{dp[j][0],dp[j][1]};其中j为i的孩子节点. 第二次做感觉已经很水了 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #i