您的位置:首页 > 其它

洛谷2633 王后万岁

2015-11-01 14:39 459 查看
题目:http://www.luogu.org/problem/show?pid=2633

分析:DP

代码:

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
const int Tmax=16005;
int n,data[Tmax],ans=-2147483640;
vector<int> G[Tmax];
int dp(int x,int fa)
{
int i,len=G[x].size(),tmp,sum=data[x],to;
for(i=0;i<len;i++)
{
to=G[x][i];
if(to==fa) continue;
tmp=dp(to,x);
if(tmp>0) sum+=tmp;
}
ans=max(ans,sum);
return sum;
}
int main()
{
int i,u,v;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&data[i]);
for(i=1;i<n;i++)
{
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
ans=max(ans,dp(1,0));
printf("%d",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: