题目传送门:牛客 1100B

Description

乃爱天下第一可爱!

乃爱居住的国家有 n n n 座城市,这些城市与城市之间有 n − 1 n-1 n−1 条公路相连接,并且保证这些城市两两之间直接或者间接相连。

我们定义两座城市之间的距离为这两座城市之间唯一简单路径上公路的总条数。

当乃爱位于第 x x x 座城市时,距离城市 x x x 距离不大于 k k k 的城市中的人都会认为乃爱天下第一可爱!

认为乃爱天下第一可爱的人们决定到乃爱所在的城市去拜访可爱的乃爱。我们定义这些城市的拥挤程度为:

距离城市x距离不大于k的城市中的人到达城市x时经过该城市的次数。例如:

假设k=2,乃爱所在的城市是1号城市,树结构如上图所示时,受到影响的城市为1,2,3,4,5,因为五个城市距离1号城市的距离分别为:0,1,2,2,2,所以这五个城市都会认为乃爱天下第一。

1号城市到1号城市经过了1号城市。

2号城市到1号城市经过了1号、2号城市。

3号城市到1号城市经过了1号、2号、3号城市。

4号城市到1号城市经过了1号、2号、4号城市。

5号城市到1号城市经过了1号、2号、5号城市。

所以1号城市的拥挤程度是5,2号城市的拥挤程度是4,3号、4号、5号城市的拥挤程度都是1。

现在小w想要问你当乃爱依次位于第 1 , 2 , 3 , 4 , 5 , . . . , n 1,2,3,4,5,...,n 1,2,3,4,5,...,n 座城市时,有多少座城市中的人会认为乃爱天下第一,以及受到影响城市的拥挤程度的乘积,由于这个数字会很大,所以要求你输出认为乃爱天下第一的城市拥挤程度乘积mod 1 0 9 + 7 10^9+7 109+7 后的结果。

Solution

Up and Down

先做一个自下而上的up dp,再做一个自上而下的子树down dp,然后在每个节点处合并两个dp数组的信息,得到以每个点作为根节点的dp信息。

x表示当前节点,y节点是x节点的父节点,那么以x作为根节点的dp信息为x的down dp合并其父节点y的up dp。

Code

/** @Name: C* @Author: Lovely_XianShen* @Date: 2019-10-29 20:30:54* @Aqours!Sunshine!!*/
#include<bits/stdc++.h>
using namespace std;const int N = 1e5 + 50, mod = 1e9 + 7;int n, k, to[N * 2], nxt[N * 2], head[N], tot, f[N][15], g[N][15], inv[N], pre[15];void add(int x, int y) {to[++tot] = y;nxt[tot] = head[x];head[x] = tot;
}int power(int x, int y) {int z = 1;for (; y; y >>= 1, x = 1ll * x * x % mod)if (y & 1)z = 1ll * z * x % mod;return z;
}void dfs1(int x, int ff) {for (int i = 0; i <= k; i++)g[x][i] = 1, f[x][i] = 1;for (int i = head[x], y; i; i = nxt[i])if ((y = to[i]) != ff) {dfs1(y, x);for (int j = 1; j <= k; j++)f[x][j] += f[y][j - 1], g[x][j] = 1ll * g[x][j] * g[y][j - 1] % mod;}for (int i = 1; i <= k; i++)g[x][i] = 1ll * g[x][i] * f[x][i] % mod;
}void dfs2(int x, int ff) {for (int i = head[x], y; i; i = nxt[i])if ((y = to[i]) != ff) {for (int j = 0; j <= k; j++)pre[j] = g[y][j];for (int j = 1; j <= k; j++)g[y][j] = 1ll * g[y][j] * inv[f[y][j]] % mod;for (int j = k; j; j--) {int dat = j > 1 ? f[y][j - 2] : 0, dat2 = j > 1 ? pre[j - 2] : 1;f[y][j] += f[x][j - 1]; g[y][j] = 1ll * g[y][j] * g[x][j - 1] % mod * inv[f[x][j - 1]] % mod * (f[x][j - 1] - dat) % mod;f[y][j] -= dat, g[y][j] = 1ll * g[y][j] * power(dat2, mod - 2) % mod;}for (int j = 1; j <= k; j++)g[y][j] = 1ll * g[y][j] * f[y][j] % mod;dfs2(y, x);}
}int main() {scanf("%d%d", &n, &k); inv[1] = 1;for (int i = 2; i <= n; i++)inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;for (int i = 1, x, y; i < n; i++)scanf("%d%d", &x, &y), add(x, y), add(y, x);dfs1(1, 0);dfs2(1, 0);for (int i = 1; i <= n; i++)printf("%d ", f[i][k]);puts("");for (int i = 1; i <= n; i++)printf("%d ", g[i][k]);puts("");return 0;
}

题解 乃爱与城市拥挤程度相关推荐

  1. 牛客-乃爱与城市拥挤程度【树形dp】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/1100/B 题目大意 nnn个点的一棵树,对于每个点求 距离该点不超过kkk的点数 每个点的权值是以该点为起点 ...

  2. 牛客网CSP-S提高组赛前集训营1题解(仓鼠的石子游戏 [博弈论] + 乃爱与城市的拥挤程度 [树上DP] + 小w的魔术扑克[dfs + 离线])

    文章目录 T1:仓鼠的石子游戏 题目 题解 代码实现 T2:乃爱与城市拥挤程度 题目 题解 代码实现 T3:小w的魔术扑克 题目 题解 代码实现 T1:仓鼠的石子游戏 题目 仓鼠和兔子被禁止玩电脑,无 ...

  3. 中国49城市智慧程度排行榜:新一线城市武汉和杭州靠前

    智慧城市是全球各个国家和城市抢占信息技术制高点以及实现城市可持续发展的重大机遇.2021年3月5-7日,以"点亮数字未来"为主题的中国数字企业CEO峰会"数字未来·新格局 ...

  4. python预测模型各国pm2.5年平均值_城市空气污染程度的分析报告和预测模型

    实用标准文档 文案大全 城市空气污染程度的分析和预测 摘 要 本文讨论了有关城市污染程度.污染因素及污染扩散的问题. 对于问题一, 本文主要从大气污染. 噪声污染和水体污染这三个面选取主要 污染物,查 ...

  5. 最爱的城市(dfs)

    题目描述: 一天小明捧着一本世界地图在看,突然小明拿起笔,将他最爱的那些城市标记出来,并且随机的将这些城市中的某些用线段两两连接起来. 小明量出了每条线段的长度,现在小明想知道在这些线段组成的图中任意 ...

  6. 大数据揭秘成都“堵车地图” 拥挤程度全国第9

    对于开车一族来说,堵车是个永恒的话题.截至今年3月底,成都机动车保有量已突破268万辆,成为中国汽车保有量排名前列的城市.因此,要回答成都堵不堵这个问题,还得对比来看. 昨日,高德交通发布第二季度城市 ...

  7. 8.9 NOIP模拟测试15 建设城市(city)+轰炸行动(bomb)+石头剪刀布(rps)

    鉴于T3的惨烈程度,我决定先来颓篇题解. T1 建设城市(city) 挡板法+容斥 m个建设队分成n组,每组必须有一个,先不考虑上限,共有 C(m-1,n-1)种方案. 有i个组是超过k个的,容斥掉 ...

  8. 北京,一个让屌丝望而却步的城市

    不知不觉来北京已近十个年头了,用八个字形容就是:悲喜交加,后知后觉. (一) 还记得2004年北京刚下火车的时候,背着双肩包,拖着编织袋,出站口检票发现车票丢了,然后检票口的工作人员粗暴地把我带到警务 ...

  9. 城市地铁站点接驳公交多目标优化方法

    1 文章信息 文章题为"城市地铁站点接驳公交多目标优化方法",是一篇发表于<交通运输工程与信息学报>有关地铁-接驳公交多目标优化的文章. 2 摘要 多方式无缝衔接,尤其 ...

最新文章

  1. 如何在阿里云上使用Data Lake Analytics分析Table Store数据
  2. python 将元组解析为多个参数
  3. attribute 扩展
  4. Flink keyby 数据倾斜问题处理
  5. 天才编程少女16岁获哈佛offer,全民网红时代,我们该怎么做?
  6. 转载:bug的处理流程
  7. 保研到国防科大计算机,拿奖到“手软” 国防科技大学这个“学霸宿舍”集体保研...
  8. shell脚本实现FTP自动上传文件
  9. BIM族库下载——Revit灯具族库
  10. OD调试初体验—关闭x86版winrar广告弹窗
  11. android手机截屏代码,Android手机截屏代码
  12. 亮剑java web_为什么《亮剑Java Web 项目开发案例导航》第二个项目运行不了?
  13. HTTP与HTTPS及计算机热门快捷键
  14. apache 在windows下无法启动的一个错误
  15. GMap常用属性(方法)简介
  16. 数学竞赛倒计时23天_变上限下限积分求导法则
  17. 装ubuntu系统U盘制作启动盘
  18. 华为荣耀X1刷机包 B003版精简 官方原汁原味卡刷rom
  19. Ubuntu 16.04 MAC主题风格设置
  20. 采购订单打印并预览PDF

热门文章

  1. 计算机课导入语,信息技术课的提问和导入技巧
  2. 怎么免卸载升级太极中的软件
  3. 微信小程序登陆验证机制理解及实现
  4. Quantopian教程系列四
  5. 将火狐浏览器默认搜索引擎设置为“百度”
  6. 【ZZULIOJ】1026: 字符类型判断
  7. 为什么苹果蓝牙耳机连上还是公放_如何测试蓝牙设备的延时
  8. Python环境搭建(mac)
  9. C++11 的 运行时类型识别type_info
  10. VCS仿真遇到【CNST-CIF】constraints inconsistency failure如何解决