HDU 6662 Acesrc and Travel 换根DP,宇宙最傻记录
#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,宇宙最傻记录的更多相关文章
- HDU 6662 Acesrc and Travel (换根dp)
Problem Description Acesrc is a famous tourist at Nanjing University second to none. During this sum ...
- Acesrc and Travel(2019年杭电多校第八场06+HDU6662+换根dp)
题目链接 传送门 题意 两个绝顶聪明的人在树上玩博弈,规则是轮流选择下一个要到达的点,每达到一个点时,先手和后手分别获得\(a_i,b_i\)(到达这个点时两个人都会获得)的权值,已经经过的点无法再次 ...
- [BZOJ4379][POI2015]Modernizacja autostrady[树的直径+换根dp]
题意 给定一棵 \(n\) 个节点的树,可以断掉一条边再连接任意两个点,询问新构成的树的直径的最小和最大值. \(n\leq 5\times 10^5\) . 分析 记断掉一条边之后两棵树的直径为 \ ...
- 2018.10.15 NOIP训练 水流成河(换根dp)
传送门 换根dp入门题. 貌似李煜东的书上讲过? 不记得了. 先推出以1为根时的答案. 然后考虑向儿子转移. 我们记f[p]f[p]f[p]表示原树中以ppp为根的子树的答案. g[p]g[p]g[p ...
- 换根DP+树的直径【洛谷P3761】 [TJOI2017]城市
P3761 [TJOI2017]城市 题目描述 从加里敦大学城市规划专业毕业的小明来到了一个地区城市规划局工作.这个地区一共有ri座城市,<-1条高速公路,保证了任意两运城市之间都可以通过高速公 ...
- 小奇的仓库:换根dp
一道很好的换根dp题.考场上现场yy十分愉快 给定树,求每个点的到其它所有点的距离异或上m之后的值,n=100000,m<=16 只能线性复杂度求解,m又小得奇怪.或者带一个log像kx一样打一 ...
- 国家集训队 Crash 的文明世界(第二类斯特林数+换根dp)
题意 题目链接:https://www.luogu.org/problem/P4827 给定一棵 \(n\) 个节点的树和一个常数 \(k\) ,对于树上的每一个节点 \(i\) ,求出 \( ...
- bzoj 3566: [SHOI2014]概率充电器 数学期望+换根dp
题意:给定一颗树,树上每个点通电概率为 $q[i]$%,每条边通电的概率为 $p[i]$%,求期望充入电的点的个数. 期望在任何时候都具有线性性,所以可以分别求每个点通电的概率(这种情况下期望=概率 ...
- codeforces1156D 0-1-Tree 换根dp
题目传送门 题意: 给定一棵n个点的边权为0或1的树,一条合法的路径(x,y)(x≠y)满足,从x走到y,一旦经过边权为1的边,就不能再经过边权为0的边,求有多少边满足条件? 思路: 首先,这道题也可 ...
随机推荐
- 灰度图像--图像分割 阈值处理之P-Tile阈值
学习DIP第53天 转载请标明本文出处:***http://blog.csdn.net/tonyshengtan ***,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:http ...
- css引入第三方字体
上面图片时将字体文件放入到fonts文件夹内, 里面有一个fonts.css文件,将字体文件声明好, 然后像下面图片一样,在另外一个css内@import引入,(当然,也可以直接将声明和引用放在一个c ...
- CF762F Tree nesting
题目连接 问题分析 可以给小树钦定一个根, \(Dp[i][j]\) 表示大树上的点 \(i\) 对应到小树上的点 \(j\) 的可能的方案数.然后每一步转移都是一个状压DP(将小树是否被匹配状压,然 ...
- 本地Git连接远程Gitlab
本地端安装https://www.cnblogs.com/wei9593/p/11698204.html 1.打开本地git bash,使用如下命令生成ssh公钥和私钥 ssh-keygen -t r ...
- Xshell安装教程及Xshell安装程序集组件时出错的解决方法
部分小伙伴在安装Xshell的时候可能会遇到这个问题:“Xshell5安装程序集组件{0D7E67F6-1A6A-3A26-AF95-B8E83DDCCC3F}时出错.HRESULT0x80070BC ...
- SVN如何处理包含@2x or @3x的图片文件
一般iOS图片文件都会包含@2x,@3x之类的字符比如icon@2x,icon@3x,当你在svn命令行中add或是delete的时候总是报错说file does not exit之类的错误,其实之类 ...
- TCP层sendmsg系统调用的实现分析
概述 sendmsg系统调用在tcp层的实现是tcp_sendmsg函数,该函数完成以下任务:从用户空间读取数据,拷贝到内核skb,将skb加入到发送队列的任务,调用发送函数:函数在执行过程中会锁定控 ...
- python接口自动化:pycharm中import yaml报错问题解决
一:问题 python3在cmd命令行中已经安装了yaml,且import yaml是成功的,但是pcharm中import yaml还是红色报错 二:分析原因 pycharm和python环境需要分 ...
- Android studio 自动导入(全部)包 import (转)
原文: https://blog.csdn.net/buaaroid/article/details/44979629 1. Android studio 只有import单个包的快捷键:A ...
- tensorflow分布式运行
1.知识点 """ 单机多卡:一台服务器上多台设备(GPU) 参数服务器:更新参数,保存参数 工作服务器:主要功能是去计算 更新参数的模式: 1.同步模型更新 2.异步模 ...