123. bx和妹子的游戏

题目描述

这天,bxbx和妹子在一个有根树上玩游戏。

这个有根树有nn个节点,编号从11到nn,其中11号节点是根节点。除了11号节点每个节点都有一个父亲节点。第ii个节点有权值a_ia​i​​。

定义s(u, v)s(u,v)为uu到vv的简单路径上所有点的权值之和(包括uu和vv)。

bxbx会随机选一个节点uu,妹子随机选一个节点vv,假设uu和vv的LCALCA为pp,bxbx能获得\max(s(u, p), s(v, p))max(s(u,p),s(v,p))的愉悦值。

现在你需要回答,考虑所有情况之下(n^2n​2​​种情况),bxbx所获得的愉悦值之和。

一个节点uu的祖先定义为从uu一直往父亲节点走若干次能到达的节点,其中uu是自身的祖先。两个节点的LCALCA(最近公共祖先)定义为既是uu的祖先,也是vv的祖先,并且和uu的距离最近的一个节点。

输入格式

输入第一行包括一个整数TT,表示数据组数。

对于每组数据,第一行一个整数nn。

第二行n-1n−1个整数,第ii个整数表示节点i+1i+1的父亲p_{i+1}p​i+1​​。

第三行nn个整数,第ii个整数表示节点i的权值a_ia​i​​。

1 \le T \le 201≤T≤20

2 \le n \le 1000002≤n≤100000

1 \le p_{i + 1} \le i, 1 \leq i \leq n - 11≤p​i+1​​≤i,1≤i≤n−1

1 \leq a_i \leq 100001≤a​i​​≤10000

输出格式

对每组数据,输出 bx 获得的愉悦值之和。

样例数据

输入

2
3
1 1
1 2 3
2
1
1 2

输出

28
9

max( S[u,p] , S[v,p] ) = max( S[1,u] , S[1,v] ) - ( S[1,p] - a[p] )

显然可以在O(n)内求出S[1,k]

S[1,i]对答案的贡献=

S[1,p]-a[p] 对答案的贡献为 = - ( p 作为 lca 的次数 * (S[1,p]-a[p]) )

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<string>
#include<vector>
#include<deque>
#include<queue>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
//#include<cti1me>
#include<string.h>
#include<math.h>
#include<list>using namespace std;#define ll long long
#define pii pair<int,int>const int inf = 1e9+7;const int N = 100000 + 5;struct Edge{int to,next;
}edge[N];
int head[N];int a[N];void addEdge(int k,int u,int v){edge[k].to=v;edge[k].next=head[u];head[u]=k;
}ll s[N];
ll childs[N];
ll tS[N];void dfs(int u,int sum){s[u]=sum+a[u];childs[u]=1;for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;dfs(v,s[u]);childs[u]+=childs[v];}
}ll f(int u){//u作为lca有多少种情况ll ans=1;for(int i=head[u];i!=-1;i=edge[i].next){int x=edge[i].to;ans+=childs[x];for(int j=edge[i].next;j!=-1;j=edge[j].next){int y=edge[j].to;ans+=childs[x]*childs[y];}}return ans;
}ll slove(int n){dfs(1,0);ll ans=0;for(int i=1;i<=n;++i){tS[i]=s[i];}sort(s+1,s+n+1);for(int i=1;i<=n;++i){ans+=s[i]*i;ans-=f(i)*(tS[i]-a[i]);}return ans;
}int main()
{//freopen("/home/lu/Documents/r.txt","r",stdin);//freopen("/home/lu/Documents/w.txt","w",stdout);int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);fill(head,head+n+1,-1);int nume=0;for(int i=2;i<=n;++i){int p;scanf("%d",&p);addEdge(nume++,p,i);}ll sub=0;for(int i=1;i<=n;++i){scanf("%d",&a[i]);sub+=a[i];}printf("%lld\n",2*slove(n)-sub);}return 0;
}

scutcode123. bx和妹子的游戏相关推荐

  1. 想剑网三妹子最多服务器,萌妹子玩游戏之剑网三 国产网游经典大作来袭

    [腾讯游戏频道 ( Hello大家好,欢迎收看萌妹子玩游戏.我就是进可高冷御姐,退可卖萌萝莉的依依酱. 这期节目给大家带来的是<剑网3>全新资料片"逐鹿中原",正所谓仇 ...

  2. 跟妹子玩游戏结果一下日了好多天

    i.             前言 过年回家饭局上碰到一个原来心仪的妹子,虽然已经4.5年没见面了,妹子见到我还是分外亲热,不仅主动挨着我坐着,居然还邀请我一起玩游戏,心中窃喜不已,哥们王者刚上了王者 ...

  3. 某程序员吐槽:免费教妹子Java编程,妹子却不让自己找她闲聊!

    许多程序员教妹子编程.带妹子打游戏,都是醉翁之意不在酒,名为教学,实为追求,但有一个程序员小哥哥却比较悲催,他答应一个妹子当她师傅,教她Java编程,结果妹子却说,学习是学习,平时是平时,让小哥哥平时 ...

  4. 【BZOJ 3729】3729: Gty的游戏 (Splay维护dfs序+博弈)

    未经博主同意不得转载 3729: Gty的游戏 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 448  Solved: 150 Descriptio ...

  5. 实时帧数手机_ROG游戏手机评测:小老弟让我教教你什么叫电竞

    ROG,没错你第一时间就会想起DIY界那鼎鼎大名的硬件系列--ROG系列硬件,或许大家还会想起另外一个词:败家之眼.ROG在人们的印象中,就是一个高贵典雅的代名词,独特的LOGO,极致的用料,打破行业 ...

  6. 游戏陪玩APP开发的功能和特点

    1.游戏评测推荐 根据对游戏的评测,向用户介绍该款游戏的内容,后根据游戏的可玩性和用户的特点,向用户推荐. 2.社区交流 通过社区的交流,促进用户之前的关系的建立,促进用户的活跃度. 3.游戏陪玩服务 ...

  7. 玩3D游戏花屏显卡测试过没有问题?网站测试咋测才能减少Bug

    在上一篇文章中,小编为您详细介绍了关于<如何更改显卡的刷新频率?台式电脑64位 显卡N卡 GTX680 用驱动精灵更新 过后 屏幕分辨率只有800X60070>相关知识.本篇中小编将再为您 ...

  8. 极具创意的3D推箱子游戏《凯瑟琳》制作流程全公开!

    http://www.opengpu.org/forum.php?mod=viewthread&tid=5945&extra=page%3D1 玩过推箱子游戏么?玩过3D的推箱子游戏么 ...

  9. 汇编语言编写的一个“接球游戏”

    学习汇编语言一学期了,为了完成期末作业,就花了10多个小时写了个"接球游戏".游戏虽然很简单,但是完成后很开心,毕竟是自己用汇编语言写的第一个程序. 一.游戏界面设计 屏幕采用的是 ...

最新文章

  1. 代码跑得慢?分分钟教你如何给代码提速30%!!!
  2. javascript:void(0);用法及常见问题解析
  3. 通过onActivityResult()先跳转到联系人界面,然后把传回来的手机号显示到应用的EditText上...
  4. 已选商品数量总计如何实现_英国VAT新政临近,没有API如何添加或修改税率?教程来了!...
  5. 算法积累之处理数组数据
  6. LeetCode题 - 83. 删除排序链表中的重复元素 python实现
  7. SQL表操作习题4 14~25题 缺20题
  8. 图片放大软件—ON1 Resize AI 2022兼容m1
  9. ifs 报表开发手册_.NET快速开发框架Colder发布:10 篇热文汇总
  10. 随机效应估算与固定效应估算_纯电动汽车的电池价格,可以怎么估算?
  11. 最大熵模的理解与最大熵模型逻辑回归相似转换条件
  12. 【转】NSBundle的使用,注意mainBundle和Custom Bundle的区别
  13. IB网卡驱动安装以及Infiniband连接带宽测试
  14. 金晨想在无人车上劈叉,撒贝宁与数字祝融号对话…这届百度世界大会,有被惊艳到...
  15. win7 系统激活工具 亲测可行
  16. matlab读取nc数据的某一列数据库,科学网—.nc数据读取详细资料matlab2010a及后面的版本 - 张凌的博文...
  17. 用shapely判断两个图形的包含相交关系
  18. 【PM杂谈】我理解的项目管理
  19. HTML5 canvas基础使用
  20. 小米开源框架MACE 源码阅读笔记 1

热门文章

  1. php 一维数组变字符串,php怎么把数组转为字符串?
  2. mysql打字看不见鼠标_电脑打字不显示怎么办?键盘不能打字不能正常输入怎么办?...
  3. Android:如何处理线上crash问题
  4. php跳转隐藏地址,php 获取跳转的Url真实地址
  5. mybatis原理(含图)
  6. js中鼠标滚轮事件详解
  7. Python Turtle绘图[难度3星]:中国结雪花(高度还原北京冬奥雪花)
  8. Java中的List集合
  9. SSM整合的配置+功能模块+测试
  10. 分布式服务框架DSF(Distributed Service Framework)