#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn=1e6+50;
const ll mod=1e9+7; int a[maxn],b[maxn];
vector<int>G[maxn];
ll dp[maxn][2]; /// 0 zhang 1 liu
ll hello[maxn][2];
ll hello2[maxn][2];
int who1[maxn][2];
int who2[maxn][2]; void go1(int u,int v){
who1[u][1]=who1[u][0];
who1[u][0]=v;
}
void go2(int u,int v){
who2[u][1]=who2[u][0];
who2[u][0]=v;
} ll flag[maxn];
int n;
void dfs1(int u,int f){
dp[u][0]=a[u]-b[u];
dp[u][1]=b[u]-a[u];
for(auto i:G[u]){
if(i==f)continue;
dfs1(i,u);
int v=i;
if(dp[v][0]>dp[who1[u][0]][0]){
go1(u,v);
}
else if(dp[v][0]>dp[who1[u][1]][0]){
who1[u][1]=v;
}
if(dp[v][1]>dp[who2[u][0]][1]){
go2(u,v);
}
else if(dp[v][1]>dp[who2[u][1]][1]){
who2[u][1]=v;
}
}
if(who1[u][0]!=0){
dp[u][0]-=dp[who2[u][0]][1];
dp[u][1]-=dp[who1[u][0]][0];
}
/*
cout<<"dp["<<u<<"]["<<0<<"]="<<dp[u][0]<<endl;
cout<<"dp["<<u<<"]["<<1<<"]="<<dp[u][1]<<endl;
for(int i=1;i<=2;i++){
for(int j=0;j<=1;j++){
if(i==1)cout<<"who1["<<u<<"]["<<j<<"]="<<who1[u][j]<<endl;
else cout<<"who2["<<u<<"]["<<j<<"]="<<who2[u][j]<<endl;
}
}
*/
}
ll sum[maxn];
int tmp1[maxn][2];
int tmp2[maxn][2];
int tmp3[maxn][2];
int tmp4[maxn][2];
ll aha1[maxn][2];
ll aha2[maxn][2]; void dfs2(int u,int f){
sum[u]=dp[u][0];
// cout<<"dp["<<u<<"]["<<0<<"]="<<dp[u][0]<<endl;
for(auto t:G[u]){
if(t==f)continue;
int v=t; for(int i=0;i<=1;i++){
aha1[u][i]=dp[u][i];
aha2[u][i]=dp[v][i];
} dp[u][0]+=dp[who2[u][0]][1];
dp[u][1]+=dp[who1[u][0]][0]; for(int j=0;j<=1;j++){
tmp1[u][j]=who1[u][j];
tmp2[u][j]=who2[u][j];
tmp3[u][j]=who1[v][j];
tmp4[u][j]=who2[v][j];
} if(who1[u][0]==v){
who1[u][0]=who1[u][1];
}
if(who2[u][0]==v){
who2[u][0]=who2[u][1];
}
if(who1[u][0]!=0){
dp[u][0]-=dp[who2[u][0]][1];
dp[u][1]-=dp[who1[u][0]][0];
} if(who1[v][0]!=0){
dp[v][0]+=dp[who2[v][0]][1];
dp[v][1]+=dp[who1[v][0]][0];
} if(dp[u][0]>dp[who1[v][0]][0]){
go1(v,u);
}
else if(dp[u][0]>dp[who1[v][1]][0]){
who1[v][1]=u;
}
if(dp[u][1]>dp[who2[v][0]][1]){
go2(v,u);
}
else if(dp[u][1]>dp[who2[v][1]][1]){
who2[v][1]=u;
} if(who1[v][0]!=0){
dp[v][0]-=dp[who2[v][0]][1];
dp[v][1]-=dp[who1[v][0]][0];
} // cout<<"dp["<<u<<"]["<<0<<"]="<<dp[u][0]<<endl;
// cout<<"dp["<<u<<"]["<<1<<"]="<<dp[u][1]<<endl;
/* for(int i=1;i<=2;i++){
for(int j=0;j<=1;j++){
if(i==1)cout<<"who1["<<u<<"]["<<j<<"]="<<who1[u][j]<<endl;
else cout<<"who2["<<u<<"]["<<j<<"]="<<who2[u][j]<<endl;
}
}*/ /* cout<<"***************"<<endl;
cout<<"dp["<<v<<"]["<<0<<"]="<<dp[v][0]<<endl;
cout<<"dp["<<v<<"]["<<1<<"]="<<dp[v][1]<<endl;*/
/*for(int i=1;i<=2;i++){
for(int j=0;j<=1;j++){
if(i==1)cout<<"who1["<<v<<"]["<<j<<"]="<<who1[v][j]<<endl;
else cout<<"who2["<<v<<"]["<<j<<"]="<<who2[v][j]<<endl;
}
} cout<<"nnnnnnnnnnnnnnn"<<endl;*/
dfs2(v,u); dp[v][0]+=dp[who2[v][0]][1];
dp[v][1]+=dp[who1[v][0]][0]; for(int j=0;j<=1;j++){
who1[u][j]=tmp1[u][j];
who2[u][j]=tmp2[u][j];
who1[v][j]=tmp3[u][j];
who2[v][j]=tmp4[u][j];
}
if(who1[v][0]!=0){
dp[v][0]-=dp[who2[v][0]][1];
dp[v][1]-=dp[who1[v][0]][0];
}
dp[u][0]-=dp[who2[u][0]][1];
dp[u][1]-=dp[who1[u][0]][0];
/*
for(int j=1;j<=2;j++){
for(int k=0;k<=1;k++){
if(j==1){
cout<<"who1["<<u<<"]["<<k<<"]="<<who1[u][k]<<endl;
}
else{
cout<<"who1["<<u<<"]["<<k<<"]="<<who2[u][k]<<endl;
}
}
}*/
for(int i=0;i<=1;i++){
dp[u][i]=aha1[u][i];
dp[v][i]=aha2[u][i];
}
}
} int main(){
std::ios::sync_with_stdio(false);
int t;
cin>>t;
dp[0][0]=-1e18;
dp[0][1]=-1e18;
while(t--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
G[i].clear();
dp[i][0]=dp[i][1]=0;
sum[i]=0;
hello[i][0]=hello[i][1]=0;
who1[i][0]=who1[i][1]=0;
who2[i][0]=who2[i][1]=0;
}
for(int i=1;i<=n;i++)cin>>b[i];
for(int i=1;i<n;i++){
int u,v;cin>>u>>v;
G[u].push_back(v);
G[v].push_back(u);
} dfs1(1,0);
// cout<<"**************"<<endl;
dfs2(1,0);
ll ans=0;
ll mx=-1e18;
for(int i=1;i<=n;i++){
mx=max(sum[i],mx);
}
cout<<mx<<endl;
}
return 0;
}
/*
5
5
1 2 4 100 1000
5 3 7 0 0
1 2
1 3
3 4
3 5 */

HDU 6662 Acesrc and Travel 换根DP,宇宙最傻记录的更多相关文章

  1. HDU 6662 Acesrc and Travel (换根dp)

    Problem Description Acesrc is a famous tourist at Nanjing University second to none. During this sum ...

  2. Acesrc and Travel(2019年杭电多校第八场06+HDU6662+换根dp)

    题目链接 传送门 题意 两个绝顶聪明的人在树上玩博弈,规则是轮流选择下一个要到达的点,每达到一个点时,先手和后手分别获得\(a_i,b_i\)(到达这个点时两个人都会获得)的权值,已经经过的点无法再次 ...

  3. [BZOJ4379][POI2015]Modernizacja autostrady[树的直径+换根dp]

    题意 给定一棵 \(n\) 个节点的树,可以断掉一条边再连接任意两个点,询问新构成的树的直径的最小和最大值. \(n\leq 5\times 10^5\) . 分析 记断掉一条边之后两棵树的直径为 \ ...

  4. 2018.10.15 NOIP训练 水流成河(换根dp)

    传送门 换根dp入门题. 貌似李煜东的书上讲过? 不记得了. 先推出以1为根时的答案. 然后考虑向儿子转移. 我们记f[p]f[p]f[p]表示原树中以ppp为根的子树的答案. g[p]g[p]g[p ...

  5. 换根DP+树的直径【洛谷P3761】 [TJOI2017]城市

    P3761 [TJOI2017]城市 题目描述 从加里敦大学城市规划专业毕业的小明来到了一个地区城市规划局工作.这个地区一共有ri座城市,<-1条高速公路,保证了任意两运城市之间都可以通过高速公 ...

  6. 小奇的仓库:换根dp

    一道很好的换根dp题.考场上现场yy十分愉快 给定树,求每个点的到其它所有点的距离异或上m之后的值,n=100000,m<=16 只能线性复杂度求解,m又小得奇怪.或者带一个log像kx一样打一 ...

  7. 国家集训队 Crash 的文明世界(第二类斯特林数+换根dp)

    题意 ​ 题目链接:https://www.luogu.org/problem/P4827 ​ 给定一棵 \(n\) 个节点的树和一个常数 \(k\) ,对于树上的每一个节点 \(i\) ,求出 \( ...

  8. bzoj 3566: [SHOI2014]概率充电器 数学期望+换根dp

    题意:给定一颗树,树上每个点通电概率为 $q[i]$%,每条边通电的概率为 $p[i]$%,求期望充入电的点的个数. 期望在任何时候都具有线性性,所以可以分别求每个点通电的概率(这种情况下期望=概率 ...

  9. codeforces1156D 0-1-Tree 换根dp

    题目传送门 题意: 给定一棵n个点的边权为0或1的树,一条合法的路径(x,y)(x≠y)满足,从x走到y,一旦经过边权为1的边,就不能再经过边权为0的边,求有多少边满足条件? 思路: 首先,这道题也可 ...

随机推荐

  1. java浮点数精度问题解决方法

    基础知识回顾: BigDecimal.setScale()方法用于格式化小数点setScale(1)表示保留一位小数,默认用四舍五入方式 setScale(1,BigDecimal.ROUND_DOW ...

  2. Codeforces 385C Bear and Prime Numbers(素数预处理)

    Codeforces 385C Bear and Prime Numbers 其实不是多值得记录的一道题,通过快速打素数表,再做前缀和的预处理,使查询的复杂度变为O(1). 但是,我在统计数组中元素出 ...

  3. 设置PyCharm中选择文本的背景颜色和代码中和选中单词相同单词的背景颜色

    1 设置选中单词的背景颜色 首先进入File->Setting->Editor->Color Scheme后复制一个存在的颜色主题作为自定义的颜色主题(默认的颜色主题是无法修改的,也 ...

  4. Http请求优化

    Http请求优化 我们在做项目开发或多或少的都会使用SpringCloud,其中做远程调度的时候会将HTTP请求Http请求优化. HTTP请求Client存在很多种. JDK原生的URLConnec ...

  5. IDEA的小技巧:1.Java代码不被识别2.目录下创建的文件夹所显示样式不是文件夹,而是"包"图标样式的问题

    在Idea上面一个正常的代码结构是这个样子的,但是有的时候,比如说当我们直接在一个文件夹中随便的创建的时候就会出现一些问题,比如说想让某个地方为代码目录,某个地方为资源目录的时候,直接的创建目录是不成 ...

  6. ant DatePicker 中文

    方式一:局部设置 import 'moment/locale/zh-cn'; import locale from 'antd/lib/date-picker/locale/zh_CN'; //调用时 ...

  7. php改变header头返回值

    $code = '400 Bad Request'; header('HTTP/1.1 '.$code);

  8. java单例模式实现

    1.最基本的单例模式 /** * @author LearnAndGet * @time 2018年11月13日 * 最基本的单例模式 */ public class SingletonV1 { pr ...

  9. 5.Hiveguigun滚(ノ`Д)ノ竟然竞争谨慎谨慎谨慎哈喇子罢工八公

    1.Hive简介 2.Hive部署与安装 3.Hive的使用 4.Hive JDBC编程

  10. LC 967. Numbers With Same Consecutive Differences

    Return all non-negative integers of length N such that the absolute difference between every two con ...