南阳理工OJ 697 The Weight of Tree 树上的最大块
连接:http://acm.nyist.net/JudgeOnline/problem.php?pid=697
?
31525 -51 25-2 -3 7 -1 41 22 33 42 5
558
?
#include<cstdio>#include<cstring>#include<vector>#define inf 1<<30using namespace std;vector<int>link[100010];bool mask[100010];int w[100010];int maxn,n;int dfs(int a){ int term,res=0; mask[a]=1; for(int i=0;i<link[a].size();i++)if(mask[link[a][i]]==0) { term=dfs(link[a][i]); if(term<0)continue; res+=term; } if(res+w[a]>maxn)maxn=res+w[a]; return res+w[a];}int main(){ // freopen("in.txt","r",stdin);int T;scanf("%d",&T);while(T--){ memset(mask,0,sizeof(mask)); scanf("%d",&n); for(int i=1;i<=n;i++)link[i].clear(); for(int i=1;i<=n;i++)scanf("%d",&w[i]); for(int i=1;i<n;i++) { int a,b; scanf("%d%d",&a,&b); link[a].push_back(b); link[b].push_back(a); } maxn=-inf; dfs(1); printf("%d\n",maxn);}return 0;}?
?
?
?
?
?
?
?
?