Anniversary party

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 6271    Accepted Submission(s): 2820

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:  2196 1494 2242 

pid=3001" target="_blank">3001 

pid=1074" target="_blank">1074 

题目大意:有n个人去參加party,每一个人都有自己的价值。后边跟很多行a b(0,0结束),表示b是a的上司,不能使他和他的上司同一时候參加,能够获得最大的快乐值,
dp[i][0]表示他不參加的最大快乐值,dp[i][1]表示他參加最大的快乐值
 ac代码
#include<stdio.h>
#include<string.h>
#define max(a,b) (a>b? a:b)
struct s
{
int u,v,next;
}edge[3000100];
int a[6060],dp[6060][2],dig[6060],head[6060],vis[6060],cnt;
void add(int u,int v)
{
edge[cnt].u=u;
edge[cnt].v=v;
edge[cnt].next=head[u];
head[u]=cnt++;
}
void dfs(int u)
{
vis[u]=1;
dp[u][1]=a[u];
int i;
for(i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].v;
if(!vis[v])
{
dfs(v);
dp[u][0]+=max(dp[v][0],dp[v][1]);
dp[u][1]+=dp[v][0];
}
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int u,v;
cnt=0;
memset(head,-1,sizeof(head));
memset(dp,0,sizeof(dp));
memset(dig,0,sizeof(dig));
memset(vis,0,sizeof(vis));
while(scanf("%d%d",&v,&u),u||v)
{
add(u,v);
dig[v]++;
}
int s;
for(i=1;i<=n;i++)
{
if(!dig[i])
{
s=i;
}
}
dfs(s);
printf("%d\n",max(dp[s][0],dp[s][1]));
}
}


最新文章

  1. URL无法显示某些特殊符号
  2. PCB设计中的20H原则
  3. LINQ to SQL大全
  4. bootstrap-下拉菜单
  5. DB2因表空间不够产生load表失败
  6. sql2000下如何新建并使用dbml
  7. [BZOJ 1070] [SCOI2007] 修车 【费用流】
  8. OD: Exploit Me - Overwrite Nearby Varible
  9. Ajax调用asp.net后台代码
  10. CSS自学笔记(12):CSS3文字特效
  11. c# winform 子窗体访问父窗体中的方法和变量
  12. [编织消息框架][网络IO模型]BIO
  13. vue2购物车ch3-(过滤器使用 单件商品金额计算 全选全不选 总金额计算 删除商品功能)
  14. 登录RabbitMQ的方法
  15. DAY10函数
  16. pip ipython启动错误 Fatal error in launcher: Unable to create process using
  17. 潭州课堂25班:Ph201805201 第六课:散列类型,运算符优先级和逻辑运算 (课堂笔记)
  18. PHP重载以及Laravel门面Facade
  19. WPF中控制窗口显示位置的三种方式
  20. Doris FE负载均衡配置

热门文章

  1. 解决locate无法使用的问题
  2. JDBC、事务和连接池
  3. fork同一时候创建多个子进程的方法
  4. 使用docker搭建hadoop分布式集群
  5. EditText电话号码格式化输入、删除案例
  6. MySQL之----在java编程加强知识点
  7. 实战c++中的vector系列--再谈vector的insert()方法(都是make_move_iterator惹的祸)
  8. bzoj3173: [Tjoi2013]最长上升子序列(树状数组+二分倒推)
  9. CentOS7安装EPEL的两种方式
  10. swoole-tcp-server