首页 > 其他分享 >HDU-1520 Anniversary party(树形DP)

HDU-1520 Anniversary party(树形DP)

时间:2022-10-18 14:06:52浏览次数:69  
标签:HDU head int MAX Anniversary 1520 include root dp

Anniversary party

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

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 eval(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
这道题目和这一道几乎一样的,

换汤不换药,
看懂了这篇博客的代码,这题自然就会了

#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <stdlib.h>

using namespace std;
#define MAX 6000
struct Node
{
int value;
int next;
}edge[MAX*2+5];
int tag[MAX+5];
int dp[MAX+5][2];
int n;
int root;
int tot;
int rat[MAX+5];
int head[MAX+5];
int vis[MAX+5];
void add(int x,int y)
{
edge[tot].value=y;
edge[tot].next=head[x];
head[x]=tot++;
}
void dfs(int root)
{

dp[root][1]=rat[root];
dp[root][0]=0;
vis[root]=1;
for(int i=head[root];i!=-1;i=edge[i].next)
{
int k=edge[i].value;
if(!vis[k])
{
dfs(k);
dp[root][1]+=dp[k][0];
dp[root][0]+=max(dp[k][0],dp[k][1]);
}
}


}
int main()
{
int a,b;
while(scanf("%d",&n)!=EOF)
{
tot=0;
memset(head,-1,sizeof(head));
memset(dp,0,sizeof(dp));
memset(vis,0,sizeof(vis));
memset(tag,0,sizeof(tag));
for(int i=1;i<=n;i++)
{
scanf("%d",&rat[i]);
}
scanf("%d%d",&a,&b);
while(a!=0&&b!=0)
{
tag[a]=1;
add(b,a);
add(a,b);
scanf("%d%d",&a,&b);
}
for(int i=1;i<=n;i++)
{
if(tag[i]==0)
{
root=i;
break;
}
}
dfs(root);
printf("%d\n",max(dp[root][0],dp[root][1]));
}
return 0;
}



标签:HDU,head,int,MAX,Anniversary,1520,include,root,dp
From: https://blog.51cto.com/u_15834522/5766260

相关文章

  • HDU 4245
    ​​HDU-4245​​​​AFamousMusicComposer​​​​Submit​​​ ​​Status​​DescriptionMr.Bisafamousmusiccomposer.Oneofhismos......
  • HDU 1698 Just a Hook(线段树)
    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1698思路:updata()区间替换,query()区间求和先上3篇博客1:http://blog.sina.com.cn/s/blog_a2dce6b30101l8bi.html 2:ht......
  • HDU 5373 The shortest problem(判断一个数能否被11整除)
    题目地址;​​点击打开链接​​思路:参考队友的代码写的,资料地址:​​点击打开链接​​ 怎样判断一个数能不能被11整除?判断一个数能不能被11整除与判断一个数能不能被......
  • HDU7239 Matryoshka Doll (DP)
    题目大意:题目描述.有......
  • HDU4417 Super Mario (主席树)
    主席树另一模板。查询的是[L,R]中<=h的个数。1#include<bits/stdc++.h>2usingnamespacestd;3#definelctr[i].ch[0]4#definerctr[i].ch[1]5#define......
  • HDU3652 B-number
    B-number题意:求1-n(<=1e9)中是13的倍数且包含“13”的个数。多组数据。数位DP#include<bits/stdc++.h>usingnamespacestd;intn;intdat[15],cnt;intf[13][11......
  • HDU-5380 Travel with candy(贪心+单调队列)
    TravelwithcandyTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:262144/262144K(Java/Others)TotalSubmission(s):396    AcceptedSubmission(s)......
  • 「HDU4035」 Maze
    \(\texttt{「HDU4035」Maze}\)\(\texttt{Describe}\)迷宫有\(n\)个房间,由\(n-1\)条隧道连通起来形成了一棵树,从结点\(1\)出发,在每个结点\(i\)都有\(3\)种可能......
  • A Magic Lamp HDU - 3183
    AMagicLampHDU-3183给定一个数字求删除N个数字后的最小数字。Input有多个测试用例。每个测试用例将包含一个给定的x整数和一个整数n(如果该整数包含m位,n将......
  • Automatic Judge HDU - 6023
    AutomaticJudgeHDU-60232019年某日,正睿OI训练营迎来了一场六一节acm专场。在五个小时的比赛时间里,你可以提交代码到比赛页面,然后评测机会给你返回一个结果。评测机......