#include #include #include using namespace std; int N; vectorG[1<<17]; long A[1<<17],B[1<<17]; long dp[1<<17][2]; void dfs(int u,int p) { dp[u][0]=A[u]; for(int v:G[u])if(v!=p) { dfs(v,u); dp[u][0]+=max(dp[v][0],dp[v][1]); dp[u][1]+=max(dp[v][0],dp[v][1]+B[u]+B[v]); } } main() { cin>>N; for(int i=0;i>A[i]; for(int i=0;i>B[i]; for(int i=1;i>u>>v; u--,v--; G[u].push_back(v); G[v].push_back(u); } dfs(0,-1); cout<