8.5-Day1T2--Asm.Def 的基本算法
题目大意
给一棵树,求∑∑w_i*w_j*w_LCA(i,j)
w_i表示i点权值
题解
显然一点点求lca是肯定会tle的
那就想如何优化
i和j的lca和j和i的lca是一样的
DFS,在每个x处,统计以它为LCA的答案总和
假设x有k个子树,权值和分别是S1,S2,…,Sk
设P=S1+S2+...+Sk 这些值可以轻易地在DFS中求出
①i、j分别在两棵不同的子树:{S1(P-S1) + S2(P-S2) + … +Sk(P-Sk)}*W_x
②i、j之一是x:(2W_x*P)*W_x
③i、j都是x:(W_x^2)*W_x
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
inline ll read()
{
ll sum = ,p = ;
char ch = getchar();
while(ch < '' || ch > '')
{
if(ch == '-')
p = -;
ch = getchar();
}
while(ch >= '' && ch <= '')
{
(sum *= ) += ch - '';
ch = getchar();
}
return sum * p;
}
const int N = ;
const ll mod = ;
int n;
ll w[N],sum[N],ans;
int head[N],cnt;
struct edge
{
int to,nxt;
}e[N];
void add(int a,int b)
{
e[++cnt].nxt= head[a];
e[cnt].to = b;
head[a] = cnt;
}
void dfs(int u,int fa)
{
sum[u] = w[u];
for(int i = head[u];i;i = e[i].nxt)
{
int v = e[i].to;
if(v == fa)
continue;
dfs(v,u);
(sum[u] += sum[v])%= mod;
}
}
void lcaa(int u,int fa)
{
for(int i = head[u];i;i = e[i].nxt)
{
int v = e[i].to;
if(v == fa)
continue;
ans = (ans + w[u]%mod * w[u]%mod * sum[v]%mod)%mod;
ans = (ans + (sum[u] - w[u] - sum[v])%mod *w[u]%mod * sum[v]%mod)%mod;
sum[u] = (sum[u] - sum[v] + mod)%mod;
}
for(int i = head[u];i;i = e[i].nxt)
{
int v = e[i].to;
if(v == fa)
continue;
lcaa(v,u);
}
}
int main()
{
n = read();
w[] = read();
for(int i = ;i <= n;i++)
{
int fa = read();
w[i] = read();
add(fa,i);
add(i,fa);
}
dfs(,);
lcaa(,);
ans = (ans * (ll)) % mod;
for(int i = ;i <= n;i++)
ans = (ans + w[i]%mod * w[i]% mod * w[i]%mod)%mod;
printf("%lld",ans);
return ;
}
8.5-Day1T2--Asm.Def 的基本算法的更多相关文章
- 2084. Asm.Def的基本算法
2084. Asm.Def的基本算法 传送门 ★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] ...
- cogs——2084. Asm.Def的基本算法
2084. Asm.Def的基本算法 ★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “有句 ...
- COGS 2084. Asm.Def的基本算法
★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “有句美国俗语说,如果走起来像鸭子,叫起来像 ...
- COGS——T2084. Asm.Def的基本算法
http://cogs.pro/cogs/problem/problem.php?pid=2084 ★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比时间 ...
- Asm.Def点大兵
syzoj上的题,收货很多,orz天天学长 原题: Asm.Def奉命组建一支m人的特种作战小队前往圣迭戈.他有n名候选人,可以在其中任意挑选.由于小队中每个人都有独特的作用,所以次序不同的两种选法被 ...
- cogs——2098. Asm.Def的病毒
2098. Asm.Def的病毒 ★☆ 输入文件:asm_virus.in 输出文件:asm_virus.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “这就 ...
- COGS2090 Asm.Def找燃料
时间限制:1 s 内存限制:256 MB [题目描述] “听说咱们要完了?”比利·海灵顿拨弄着操纵杆,头也不回地问Asm.Def. “不要听得风就是雨.” “开个玩笑嘛.不就是打机器人,紧张啥,你 ...
- COGS2085 Asm.Def的一秒
时间限制:1 s 内存限制:256 MB [题目描述] “你们搞的这个导弹啊,excited!” Asm.Def通过数据链发送了算出的疑似目标位置,几分钟后,成群结队的巡航导弹从“无蛤”号头顶掠过 ...
- COGS 2091. Asm.Def的打击序列
★★★ 输入文件:asm_lis.in 输出文件:asm_lis.out 简单对比时间限制:4 s 内存限制:256 MB [题目描述] 白色圆柱形的“蓝翔”号在虚空中逐渐变大,一声沉 ...
- COGS 2082. Asm.Def谈笑风生
★ 输入文件:asm_talk.in 输出文件:asm_talk.out 简单对比时间限制:2 s 内存限制:256 MB [题目描述] “人呐都不知道,自己不可以预料,直升机刚一出圣 ...
随机推荐
- CodeForce 377 A mazes(dfs+连通性问题)
Pavel 喜欢网格迷宫.一个网格迷宫是一个 n × m 的长方形迷宫,其中每个单元格要么是空白的,要么是墙体.您可以从一个单元格走到另一个单元格,只要两个单元格均是空白的,且拥有一条公共的边. Pa ...
- mysql-sql分析策略及优化
tranlation事务:从失败中回复到正常状态的方法多个应用并发访问数据库时,提供隔离方法 acid原子性:要么成功.要么失败一致性:数据保持“合理性”隔离型:多个事务同时并发执行,每个事务就像各自 ...
- 学习 Rust cookbook 之算法篇(algorithm)
原文作者:suhanyujie 永久链接:https://github.com/suhanyujie/rust-cookbook-note 博客链接:https://ishenghuo.cnblogs ...
- 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(8.8)-- Reservations
8.8 Reservations 预订 NVMe的reservation预订功能,用于让两个或多个主机能够协调配合的访问共享namespace.使用这些功能的协议和方式超出了本规格说明书的范围.对这些 ...
- linq和初始化器
对象初始化器 在没有初始化器之前,我们初始化一个对象可能需要在构造函数内对属性赋值,或者先实例化一个对象,在一个一个的对其属性赋值. 使用初始化器: 已知类型:var query = new Pers ...
- centos7添加搜狗输入法
https://www.cnblogs.com/eeexu123/p/9259430.html https://blog.csdn.net/jpch89/article/details/8190380 ...
- 2017-12-08 违法数据筛选.sql
SELECT R. ID, R.LKBH, R.CDBH, R.FXBH, R.ZJBH, R.SBBH, R.CPHM, R.CPYSBH, R.CPYS, R.CSYSBH, R.CSYS, R. ...
- DoS攻击种类
DoS攻击有许多种类,主要有Land攻击.死亡之ping.泪滴.Smurf攻击及SYN洪水等. 据统计,在所有黑客攻击事件中,syn洪水攻击是最常见又最容易被利用的一种DoS攻击手法. 1.攻击原理 ...
- Intellij IDEA 控制台中文乱码问题
如果Intellij IDEA 控制台出现中文乱码: 1.修改Intellij IDEA 配置文件: 在安装目录的bin文件夹里找到 idea.exe.vmoptions 和 idea64.exe.v ...
- scw——02错误initializationError(Runner:JUnit 4)
代码: 错误: 原因:版本不同,自动生成的代码不同 解决: