poj 2342 && 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 #include<cmath>
 6 #include<queue>
 7 #include<map>
 8 using namespace std;
 9 #define MOD 1000000007
10 const int INF=0x3f3f3f3f;
11 const double eps=1e-5;
12 typedef long long ll;
13 #define cl(a) memset(a,0,sizeof(a))
14 #define ts printf("*****\n");
15 const int MAXN=6010;
16 int n,m,tt;
17 int aa[MAXN];
18 int tot,head[MAXN],dp[MAXN][2],in[MAXN];
19 struct Edge
20 {
21     int to,next;
22 }edge[MAXN];
23 void addedge(int u,int v)
24 {
25     edge[tot].to=v;
26     edge[tot].next=head[u];
27     head[u]=tot++;
28 }
29 int dfs(int u)
30 {
31     for(int i=head[u];i!=-1;i=edge[i].next)
32     {
33         int v=edge[i].to;
34         dfs(v);
35         dp[u][1]+=dp[v][0];
36         dp[u][0]+=max(dp[v][0],dp[v][1]);
37     }
38     return max(dp[u][0],dp[u][1]);
39 }
40 void init()
41 {
42     tot=0;
43     memset(head,-1,sizeof(head));
44     cl(dp);
45     cl(in);
46 }
47 int main()
48 {
49     int i,j,k;
50     #ifndef ONLINE_JUDGE
51     freopen("1.in","r",stdin);
52     #endif
53     while(scanf("%d",&n)!=EOF)
54     {
55         init();
56         for(i=1;i<=n;i++)
57            scanf("%d",&dp[i][1]);
58         int a,b;
59         while(scanf("%d%d",&a,&b))
60         {
61             if(a==0&&b==0)break;
62             addedge(b,a);
63             in[a]++;
64         }
65         int ans=0;
66         for(i=1;i<=n;i++)        //题目的意思就一棵树
67         {
68             if(!in[i])  ans=dfs(i);
69         }
70         printf("%d\n",ans);
71     }
72 }
时间: 2024-10-21 08:50:03

poj 2342 && hdu 1520 树形dp的相关文章

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 树形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

POJ 2342 Anniversary party 树形dp入门

http://poj.org/problem?id=2342 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚会的总活跃指数最大. 对于每一个人,都有两种情况,选,或者不选.然后选了后,他的下属就只能不选了,如果它不选,下属可能选或者不选. 这样用dfs + 记忆化搜索,就好了 每次搜索,就是要求以第cur个节点为根的子树中,其中第cur个节点的状态是s

POJ 2342 Anniversary party (树形dp 入门题)

Anniversary party Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4810   Accepted: 2724 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

POJ 2342 Anniversary party 树形DP基础题

题目链接:http://poj.org/problem?id=2342 题目大意:在一个公司中,每个职员有一个快乐值ai,现在要开一个party,邀请了一个员工就不可能邀请其直属上司,同理邀请了一个人就不可以邀请其的直属员工, 问如何使得这个快乐值达到最大. 题解:对每个结点dp[i][0]表示不邀请这个员工,其子树达到的最大快乐值,dp[i][1]表示邀请i员工其子树达到的最大值. dp[i][0]=(i的全部员工的max(dp[u][1],dp[u][0)相加,也就是其子员工来或不来的最大快

POJ 2342 Anniversary Party ( 树形DP )

deque 的插入操作不一定有 vector 快 #include <iostream> #include <cstring> #include <fstream> #include <vector> using namespace std; #define NOT_SELECTED 0 #define SELECTED 1 #define SIZE 6001 vector< int > relations[SIZE]; bool visited

poj 2342 &amp;&amp; hdu 1520

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

hdu 4123 树形DP+RMQ

http://acm.hdu.edu.cn/showproblem.php?pid=4123 Problem Description Bob wants to hold a race to encourage people to do sports. He has got trouble in choosing the route. There are N houses and N - 1 roads in his village. Each road connects two houses,

hdu 1250 树形DP

Anniversary party Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Appoint description:  System Crawler  (2014-07-27) Description There is going to be a party to celebrate the 80-th Anniversary of the Ural St