您的位置:首页 > 其它

洛谷 p1352 没有上司的舞会 题解

2016-09-30 16:29 253 查看

P1352 没有上司的舞会

题目描述

某大学有N个职员,编号为1~N。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数。

输入输出格式

输入格式:

第一行一个整数N。(1<=N<=6000)

接下来N行,第i+1行表示i号职员的快乐指数Ri。(-128<=Ri<=127)

接下来N-1行,每行输入一对整数L,K。表示K是L的直接上司。

最后一行输入0 0

输出格式:

输出最大的快乐指数。

输入输出样例

输入样例#1:

7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5
0 0


输出样例#1:

5
——————————————————————————————————我是华丽丽的分割线————————————————————————————————

树形动规果题。


/*
Problem:P1352 没有上司的舞会
OJ:        洛谷
User:    S.B.S.
Time:    27 ms
Memory: 16992 kb
Length: N/A
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstdlib>
#include<iomanip>
#include<cassert>
#include<climits>
#include<functional>
#include<bitset>
#include<vector>
#include<list>
#include<map>
#define F(i,j,k) for(int i=j;i<=k;i++)
#define M(a,b) memset(a,b,sizeof(a))
#define FF(i,j,k) for(int i=j;i>=k;i--)
#define maxn 10001
#define inf 0x3f3f3f3f
#define maxm 1001
#define mod 998244353
//#define LOCAL
using namespace std;
int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int n,m;
int x,y,k;
int cnt,c[maxn],head[maxn];
bool b[maxn];
int f[maxn][2];
vector <int> edge[maxn];
void dfs(int u)
{
int a,b;
for(int i=0;i<edge[u].size();i++)
{
dfs(edge[u][i]);
f[u][0]+=max(f[edge[u][i]][0],f[edge[u][i]][1]);
f[u][1]+=f[edge[u][i]][0];
}
f[u][1]+=c[u];
}
int main()
{
std::ios::sync_with_stdio(false);//cout<<setiosflags(ios::fixed)<<setprecision(1)<<y;
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif
int n,m;
cin>>n;
for(int i=1;i<=n;i++) cin>>c[i];
int x,y;
for(int i=1;i<=n;i++)
{
cin>>x>>y;
if(x==0&&y==0) break;
else
{
edge[y].push_back(x);
b[x]=true;
}
}
for(int i=1;i<=n;i++)
{
if(b[i]==false)
{
dfs(i);
cout<<max(f[i][1],f[i][0])<<endl;
break;
}
}
return 0;
}


p1352
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: