Written by Anonymous

#include <iostream>
#include <vector>
using namespace std;

#define MAX 500000
#define INF 0x3f3f3f3f

vector<int> G[MAX];

int n, vis[MAX], tot[MAX], resp=-INF;

int dfs(int x){
  vis[x]=1;

  for(int i=0;i<(int)G[x].size();i++){
    int v=G[x][i];

    if(!vis[v])a
      tot[x]+=dfs(v);
  }

  return tot[x];
}

int main(){
  cin>>n;

  for(int i=0;i<n-1;i++){
    int a, b;
    cin>>a>>b;
    G[a].push_back(b);
    G[b].push_back(a);
  }

  for(int i=1;i<=n;i++)
    cin>>tot[i];

  dfs(1);

  for(int i=1;i<=n;i++)
    if(tot[i]>resp)
      resp=tot[i];

  cout<<resp<<endl;
}
Notepad
Select All