bzoj·入门OJ·统计损失
初见安~这里是传送门:入门OJ P2004
Description
SJY有一天被LLT紧急召去计算一些可能的损失。LLT元首管理的SHB国的交通形成了一棵树,现在将会出现一颗陨石
砸在SHB国中,并且陨石砸毁的必定是SHB国构成的交通树上的一条路径。SHB国的损失可表示为被砸毁的路径上的
所有城市价值之积。现在还暂时无法确定陨石的掉落路线,所以LLT元首希望SJY能够告诉他SHB国在受到每一种砸
毁方式后会受到的损失之和模10086之后的值。注意:单独一个节点也被认为是合法的路径。
Input
第1行一个数n,表示城市数,n<=100000
第2行n个数,第i个数表示第i个城市的价值。
第3到n+1行,每行两个数u,v,表示城市u,v之间有一条道路。
Output
包含一个数,表示SHB国将受到的损失之和。
Sample Input
5
7 6 6 1 1
1 2
2 3
2 4
1 5
Sample Output
778
Sol
的做法很显然,从每个点出发枚举到其他所有点的路径的乘积并累和。【我当时写的WA了两个点,至今感到匪夷所思】
也很明显,这个题只能是用的树形dp来解。
所以关键问题就是——怎么dp………【废话。
【以下思路及代码参考:这篇题解】
其实dp需要考虑的关键问题就是状态。路径的状态只有两种——直链和折链。直链的话很好处理,就是从下往上每个子树的值乘上当前点的值再加上当前点的值。表达出来就是:。这里应该比较好理解,就是依次网上,以各个点为下面那个点并以当前点为上面那个点时的链。所以对于直链的答案统计起来就是。
那么对于折链呢?其实也就相当于是两条直链。把所有子树的答案乘起来就行了【??!啪】
假设处理到了子树v,那么让这个子树负责一条半链,另外半条让其他子树负责,所以此时答案也就是。当然,还要注意去重和对于u的计算这些细节。这里就不提了【大雾
折链的答案不能加入dp里带进去往上推的。因为很显然如果带进去了那其中有些方案就不是单纯的两点之间的路径了。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define maxn 100005
using namespace std;
const int mod = 10086;
typedef long long ll;
int read() {int x = 0, f = 1, ch = getchar();while(!isdigit(ch)) {if(ch == '-') f = -1; ch = getchar();}while(isdigit(ch)) x = (x << 1) + (x << 3) + ch - '0', ch = getchar();return x * f;
}struct edge {int to, nxt;edge() {}edge(int tt, int nn) {to = tt, nxt = nn;}
}e[maxn << 1];int head[maxn], k = 0;
void add(int u, int v) {e[k] = edge(v ,head[u]); head[u] = k++;}int n, va[maxn];
ll ans = 0, dp[maxn];
bool vis[maxn];
void dfs(int u, int fa) {dp[u] = va[u];//记得要初始化为u的valuell sum = 0;for(int i = head[u]; ~i; i = e[i].nxt) {register int v = e[i].to; if(v == fa) continue;dfs(v, u);dp[u] = (dp[u] + dp[v] * va[u]) % mod;//dp累计直链的答案ans = (ans + sum * dp[v]) % mod;//因为折链的统计不能加入dp,那就直接加入ans吧。这里v子树没有包含u节点sum = (sum + dp[v] * va[u]) % mod;//一定要在ans计算过后再累计进去}ans = (ans + dp[u]) % mod;//最后加上直链的答案
}signed main() {memset(head, -1, sizeof head);n = read();ll T = 0;for(int i = 1; i <= n; i++) va[i] = read(), T += va[i];//T没啥用,自行忽略for(int u, v, i = 1; i < n; i++) u = read(), v = read(), add(u, v), add(v, u);dfs(1, 0);printf("%lld\n", ans % mod);return 0;
}
是很经典的一类树形dp题呢。
迎评:)
——End——
bzoj·入门OJ·统计损失相关推荐
- 【bzoj 入门OJ】[NOIP 热身赛]Problem C: 星球联盟(并查集)
Problem C: 星球联盟 Time Limit: 4 Sec Memory Limit: 256 MB Submit: 57 Solved: 15 [Submit][Status][Web ...
- 东方博宜OJ——1007 - 【入门】统计大写英文字母的个数
题目: 1007 - [入门]统计大写英文字母的个数 题目描述 算算以'.'结束的一串字符中含有多少个大写的英文字母. 输入 输入一串字符(长度不超过80),以'.'结束. 输出 输出一行,即这串字符 ...
- 文本分类入门(三)统计学习方法
文本分类入门(三)统计学习方法 前文说到使用统计学习方法进行文本分类就是让计算机自己来观察由人提供的训练文档集,自己总结出用于判别文档类别的规则和依据.理想的结果当然是让计算机在理解文章内容的基础上进 ...
- 2019.6.7 一场搜索专题的考试【including 洛谷·血色先锋队,入门OJ·兴建高铁,珠光宝气阁
这次分数还好.但全是搜索题还没上200就有点打击人了--[本狸才177QAQ 血色先锋队/血色敢死队 传送门:洛谷P1332 & 入门OJ P2259 Description 邪魔天国领主复活 ...
- 【Java入门】统计字符串中“ a ~ z “各个字符出现的次数
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.知识点 二.代码 三.运行截图 前言 入门版统计字符串中" a ~ z "各个字符出现的次数, ...
- 1007 - 【入门】统计大写英文字母的个数
1007 - [入门]统计大写英文字母的个数 题目描述 算算以'.'结束的一串字符中含有多少个大写的英文字母. 输入 输入一串字符(长度不超过80),以'.'结束. 输出 输出一行,即这串字符中大写字 ...
- Mapreduce入门--词频统计
前言 本篇博客内容:使用Hadoop提供给Java的依赖和接口轻松实现Mapreduce词频统计程序的入门. 工具:IDEA 需求:统计<yxp>这首诗中每个单词和符号出现的次数 诗的内容 ...
- 模型泛化能力(泛化误差+泛化误差上界)| 15mins 入门 | 《统计学习方法》学习笔记(六)
泛化能力 一. 泛化误差 学习方法的泛化能力(generalization ability):方法学习到的模型对未知数据的预测能力. 评价标准:测试误差. 但因为测试数据集是有限的,很有可能由此得到的 ...
- [Usaco2010 Hol]cowpol 奶牛政坛(入门oj Problem 5274)
第三次发题解哈.有什么表述错误的请见谅(可以提出). 题目源地址:https://www.lydsy.com/JudgeOnline/problem.php?id=1776 文章目录 题目描述 输入 ...
- 模型评估与模型选择(训练误差和测试误差+过拟合)| 15mins 入门 | 《统计学习方法》学习笔记(四)
模型评估与模型选择 当损失函数给定时,基于损失函数的模型的训练误差(training error)和模型的测试误差(test error)就自然成为学习方法评估的标准. 训练误差的大小,对判定给定的问 ...
最新文章
- linux服务器每秒并发处理数的计算方法
- 最短编辑距离问题理解
- 13.10 Scala中使用JSON.toJSONString报错:ambiguous reference to overloaded definition
- [文档]. Xilinx - 编写有效的Testbenches
- apache启动失败_请检查相关配置.√mysql5.1已启动._1、Apache启动失败,请检查相关配置-百度经验...
- springboot 实现机器学习_SpringBoot架构浅谈
- 【调参】如何为神经网络选择最合适的学习率lr-LRFinder-for-Keras
- div+css完成首页布局
- WordPress Exploit Scanner插件安全绕过漏洞
- easyui图标使用(查找)
- iconfont图标
- iWatch开发的真机调试适配攻略
- Element ui 修改 <el-collapse 的 <el-collapse-item 标题字体大小
- 利用JS来设计夜场的倒计时以及进入页面
- Java基本概念(世外隐者——隐居深山的“关键字”)
- SCU - 1114 数字三角(dp入门ing)
- R语言-导入数据集并以第一列为行名
- 分享一个DEM数据下载的方法
- 基于Linux系统mjpg_streamer流媒体移植(摄像头驱动移植)
- saiku+kettle整合(八)saiku展示改善