$Luogu$ $P1122$ 鏈€澶у瓙鏍戝拰
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了$Luogu$ $P1122$ 鏈€澶у瓙鏍戝拰相关的知识,希望对你有一定的参考价值。
鏍囩锛?a href='http://www.mamicode.com/so/1/tin' title='tin'>tin
struct oid add etc printf pac dde class鑳屾櫙
棰樻剰
缁欏畾涓€妫?(n) 涓妭鐐圭殑鏃犳牴鏍戠殑 (n-1) 鏉¤竟鍙?(n) 涓偣鐨勬潈鍊?(val_i) 锛屾眰鏌愭5瀛愭爲鐨勬渶澶ф潈鍊煎拰銆?/p>
瑙f硶
杩樻槸鏍戝舰 (dp) 妯℃澘銆?br /> 杩樻槸娌℃湁鏍圭殑鏍戙€?br /> 涓轰簡鏂逛究锛屼笉濡ㄨ (1) 鍙疯妭鐐逛负鏍癸紝鍒欑洿鎺ヤ粠 (1) 鍙风偣寮€濮?(dfs) 鍑烘墍鏈夌偣鐨勭埗浜插嵆鍙€?br /> 涓嶅Θ璁?(f_x) 浠h〃浠?(x) 鑺傜偣涓烘牴鐨勫瓙鏍戠殑鏈€澶ф潈鍊煎拰銆傝杈归泦涓?(E) 锛屽垯鏈?(f_x=sum_limits{(x,y) in E} max { f_y,0 }+val_x) 锛岃姹傜殑涓嶆槸 (f_1) 锛佷笉鏄?(f_1) 锛佷笉鏄?(f_1) 锛佽姹傜殑涓滆タ鏄?(max_limits{i in [1,n]} f_i) 锛侊紒锛?/p>
缁嗚妭
鐢变簬鏈夎礋鏉冨€硷紝璁板緱鎶婄瓟妗堥璁句负 (-inf) 鍐嶆洿鏂般€?/p>
浠g爜
(View) (Code)
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
int ret=0,f=1;
char ch=getchar();
while('9'<ch||ch<'0')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while('0'<=ch&&ch<='9')
{
ret=(ret<<1)+(ret<<3)+ch-'0';
ch=getchar();
}
return ret*f;
}
const int inf=-2147483648;
int n,val[16005],x,y,fa[16005],f[16005],ans=inf;
int num,head[32005];
bool vis[16005];
struct edge
{
int ver,nxt;
}e[32005];
inline void adde(int u,int v)
{
e[++num].ver=v;
e[num].nxt=head[u];
head[u]=num;
}
void dfs(int x)
{
vis[x]=1;
for(register int i=head[x];i;i=e[i].nxt)
{
int y=e[i].ver;
if(vis[y])
continue;
vis[y]=1;
fa[y]=x;
dfs(y);
}
}
void dp(int x)
{
f[x]=val[x];
for(register int i=head[x];i;i=e[i].nxt)
{
int y=e[i].ver;
if(y==fa[x])
continue;
dp(y);
if(f[y])
f[x]+=f[y];
}
}
int main()
{
n=read();
for(register int i=1;i<=n;i++)
val[i]=read();
for(register int i=1;i<n;i++)
{
x=read();
y=read();
adde(x,y);
adde(y,x);
}
dfs(1);
dp(1);
for(register int i=1;i<=n;i++)
ans=max(ans,f[i]);
printf("%d
",ans);
return 0;
}
以上是关于$Luogu$ $P1122$ 鏈€澶у瓙鏍戝拰的主要内容,如果未能解决你的问题,请参考以下文章