统计损失

题目描述

SJY有一天被LLT紧急召去计算一些可能的损失。LLT元首管理的SHB国的交通形成了一棵树,现在将会出现一颗陨石砸在SHB国中,并且陨石砸毁的必定是SHB国构成的交通树上的一条路径。SHB国的损失可表示为被砸毁的路径上的所有城市价值之积。现在还暂时无法确定陨石的掉落路线,所以LLT元首希望SJY能够告诉他SHB国在受到每一种砸毁方式后会受到的损失之和模10086之后的值。注意:单独一个节点也被认为是合法的路径。

输入

第1行一个数n,表示城市数。

第2行n个数,第i个数表示第i个城市的价值。

第3到n+1行,每行两个数u,v,表示城市u,v之间有一条道路。

输出

包含一个数,表示SHB国将受到的损失之和。

样例输入

5

7 6 6 1 1

1 2

2 3

2 4

1 5

样例输出

778

提示

【数据规模和约定】

n<=100;

n<=3000;

n<=100000

题意

给你一棵树,求树上任意一条路径的节点的积的和。

题解

(1)头尾的lca等于头或尾

f[i]=∑f[v[i]]∗a[i],f[i]表示以i节点为头(尾)的路径的乘积之和

(2)头尾的lca不为头或尾,即倒“V”型

我们发现若两点(u,v)的lca为i ,那么可以划分为u到i的直线*v到i的直线。

那么lca为i的路径乘积之和为

对于搜到的每一个子节点,ans:=ans+sum*f[v];sum:=sum+f[v]*a[u];

const oo=10086;maxn=200010;
var n,i,u,v,tot,ans:longint;
    a,vet,next,head,f:array[0..maxn] of longint;

procedure add(u,v:longint);
begin
  inc(tot);
  vet[tot]:=v;
  next[tot]:=head[u];
  head[u]:=tot;
  inc(tot);
  vet[tot]:=u;
  next[tot]:=head[v];
  head[v]:=tot;
end;

procedure dfs(u,pre:longint);
var e,v:longint;
begin
  e:=head[u];
  while e<>0 do
  begin
    v:=vet[e];
    if v<>pre then
    begin
      dfs(v,u);
      ans:=(ans+(f[u]-a[u]+oo)*f[v]) mod oo;
      f[u]:=(f[u]+f[v]*a[u]) mod oo;
    end;
    e:=next[e];
  end;
  ans:=(ans+f[u]) mod oo;
end;

begin
read(n);
for i:=1 to n do
begin
  read(a[i]);
  f[i]:=a[i];
end;
for i:=1 to n-1 do
begin
  read(u,v);
  add(u,v);
end;
dfs(1,0);
write(ans);
end.

时间: 2024-10-09 21:34:03

统计损失的相关文章

20170707测试

Day1 T1寻找羔羊 时间限制: 1 Sec  内存限制: 256 MB 题目描述 给定一个由小写字母组成的字符串,寻找包含"agnus"(羔羊)的子串的个数.注意:当且仅当两个子串的起始位置和终点不同时,这两个子串属于不同的子串. 输入 只有一个字符串,表示题中所述的字符串. 输出 仅一个数字,表示满足题意的子串个数. 样例输入 agnusbgnus 样例输出 6 提示 [样例解释] 6个子串分别是:agnus.agnusb.agnusbg.agnusbgn.agnusbgnu.a

Pytorch学习--编程实战:猫和狗二分类

Pytorch学习系列(一)至(四)均摘自<深度学习框架PyTorch入门与实践>陈云 目录: 1.程序的主要功能 2.文件组织架构 3. 关于`__init__.py` 4.数据处理 5.模型定义 6.工具函数 7.配置文件 8.main.py 9.使用 1.程序的主要功能: 模型定义    数据加载    训练和测试 2.文件组织架构: ```├── checkpoints/├── data/│   ├── __init__.py│   ├── dataset.py│   └── get_

Pytorch:实战指南

在做深度学习实验或项目时,为了得到最优的模型结果,中间往往需要很多次的尝试和修改.而合理的文件组织结构,以及一些小技巧可以极大地提高代码的易读易用性.根据我的个人经验,在从事大多数深度学习研究时,程序都需要实现以下几个功能: 模型定义 数据处理和加载 训练模型(Train&Validate) 训练过程的可视化 测试(Test/Inference) 另外程序还应该满足以下几个要求: 模型需具有高度可配置性,便于修改参数.修改模型,反复实验 代码应具有良好的组织结构,使人一目了然 代码应具有良好的说

统计学习方法笔记(1)——统计学习方法概论

1.统计学习 统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科,也称统计机器学习.统计学习是数据驱动的学科.统计学习是一门概率论.统计学.信息论.计算理论.最优化理论及计算机科学等多个领域的交叉学科. 统计学习的对象是数据,它从数据出发,提取数据的特征,抽象出数据的模型,发现数据中的知识,又回到对数据的分析与预测中去.统计学习关于数据的基本假设是同类数据具有一定的统计规律性,这是统计学习的前提. 统计学习的目的就是考虑学习什么样的模型和如何学习模型. 统计学习

统计学习方法笔记 提升树

提升树是以分类树或回归树为基本分类器的提升方法 提升树被认为是统计学习中性能最好的方法之一 提升方法实际采用加法模型(基函数的线性组合)与前向分步算法 以决策树为基函数的提升方法称为提升树 ? 对分类问题决策树是二叉分类树 对回归问题决策树是二叉回归树 ? 提升树模型可以表示为决策树的加法模型: T(x;Θm)表示决策树: Θm为决策树的参数: M为树的个数. 提升树算法采用前向分步算法. 首先确定初始提升树f0(x)=0,第m歩的模型是 fm-1(x)为当前模型,通过经验风险极小化确定下一棵决

统计学习方法概论

统计学习 统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科.统计学习也称为统计机器学习(statical machine learning). 统计学习的方法是基于数据构建统计模型从而对数据进行预测和分析.统计学习由监督学习.非监督学习.半监督学习和强化学习等组成. 统计学习方法包括假设空间.模型选择的准则.模型学习的算法,这些统称为统计学习方法的三要素:模型(Model).策略(Strategy).算法(Algorithm). 实现统计学习方法的步骤如下:

统计学习概念

统计学习是基于数据构建统计模型从而对数据进行预测与分析,统计学习由监督学习,非监督学习,半监督学习和强化学习等组成 统计学习由模型的假设空间(学习的模型属于某个函数的集合),模型选择的准则,及模型学习的算法 统计学习方法步骤如下: (1)得到一个有限的训练数据集合 (2)确定包含所有可能的模型的假设空间(学习模型的集合) (3)确定模型选择的准则,即学习的策略 (4)实现求解最优模型的算法即学习的算法 (5)通过学习方法选择最优模型 (6)利用学习的最优模型对新数据进行预测或分析 1.监督学习

文档词频统计

一.计划 首先鉴于之前只学习过c程序和java程序的语法,对c++/c#一无所知,学习语法大约5小时. 虽然上学期写过一个类似的java程序,但感觉功能还是有些区别,而且java与c++的方法好多不同,所以并不能直接在其基础上修改.写各个小功能的函数3小时,写递归函数扫描文件夹3小时. 完成之后还需要对程序进行优化,大约预计这部分用大约3小时. 二.实际用时 实际的用时比自己的预想要差一些,学习c++语法比预想要快一些,用了3个小时左右,简单浏览了一次语法,觉得和之前掌握的c和java都有接近的

卡巴斯基:三大垃圾邮件趋势 助你免受钱财损失

自诞生之日起,电子邮件已走过了43年的风风雨雨.现在,它已成为人们日常工作与生活密不可分的一部分.正是由于它的高度普及与重要性,网络罪犯从未停止利用电子邮件实施各类欺诈活动.作为一家以保护所有用户安全为己任的IT安全供应商,卡巴斯基实验室始终坚持以领先水准为广大用户提供可靠的安全防护.为此,卡巴斯基实验室定期发布有关垃圾邮件最新趋势的分析报告,以防垃圾邮件所引发的用户机密信息遗失或钱财损失. 根据卡巴斯基实验室的统计,在2014年第二季度中,垃圾邮件占所有邮件流量的68.6%,较上一季度上升2.