正题

题目链接:https://ac.nowcoder.com/acm/contest/1100/B


题目大意

nnn个点的一棵树,对于每个点求

  1. 距离该点不超过kkk的点数
  2. 每个点的权值是以该点为起点长度所有不超过kkk的路径覆盖该点的次数,求所有点的乘积

解题思路

对于第一问我们先考虑在子树中的,sizx,zsiz_{x,z}sizx,z​表示距离该点不超过zzz的点数,有转移sizx,z=1+∑x−>ysizy,z−1siz_{x,z}=1+\sum_{x->y}siz_{y,z-1}sizx,z​=1+x−>y∑​sizy,z−1​
然后那么我们每个点的答案我们就只需要计算xxx的祖宗节点即可,
定义xxx的第zzz代祖宗表示为fazfa_zfaz​,有贡献sizfaz,k−z−sizfaz−1,k−z−1siz_{fa_z,k-z}-siz_{fa_{z-1},k-z-1}sizfaz​,k−z​−sizfaz−1​,k−z−1​

这样我们就解决了第111问,考虑第222问

依旧先考虑子树定义mulx,zmul_{x,z}mulx,z​表示距离为zzz时xxx点子树中的值(注意不能计算xxx点,因为xxx的价值还不知道)
有mulx,z=∏x−>y(muly,z−1∗sizy,z−1)mul_{x,z}=\prod_{x->y} (mul_{y,z-1}*siz_{y,z-1})mulx,z​=x−>y∏​(muly,z−1​∗sizy,z−1​)

那依旧对于每一个的子树祖宗,有贡献mulfaz,k−zmulfaz−1,k−z−1\frac{mul_{fa_z,k-z}}{mul_{fa_{z-1,k-z-1}}}mulfaz−1,k−z−1​​mulfaz​,k−z​​

但是该点的值还没有计算,我们发现对于该点的值就是它和所有往上的祖宗的sizfaz,k−z+sizfaz−1,k−z−1siz_{fa_z,k-z}+siz_{fa_{z-1},k-z-1}sizfaz​,k−z​+sizfaz−1​,k−z−1​之和,在上一问计算时计入即可。

时间复杂度O(nk)O(nk)O(nk)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e5+100,XJQ=1e9+7;
struct node{ll to,next;
}a[N*2];
ll n,k,tot,ls[N],f[N],g[N],siz[N][15],mul[N][15],fa[N],num[15];
void addl(ll x,ll y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void dfs(ll x)
{for(ll j=0;j<=10;j++)siz[x][j]=mul[x][j]=1;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(y==fa[x]) continue;fa[y]=x;dfs(y);for(ll j=1;j<=10;j++){siz[x][j]+=siz[y][j-1];(mul[x][j]*=mul[y][j-1]*siz[y][j-1]%XJQ)%=XJQ;}}
}
ll power(ll x,ll b)
{ll ans=1;while(b){if(b&1) ans=ans*x%XJQ;x=x*x%XJQ;b>>=1;}return ans;
}
void dfs2(ll x)
{ll now=x,z=k;f[x]=(num[k]=siz[x][k]);while(--z&&fa[now]){f[x]+=siz[fa[now]][z]-siz[now][z-1];num[z]=f[x];now=fa[now];}if(fa[now])f[x]++;now=x;z=k;g[x]=mul[x][k]*f[x]%XJQ;while(--z&&fa[now]){(g[x]*=mul[fa[now]][z]*power(mul[now][z-1]*siz[now][z-1]%XJQ,XJQ-2)%XJQ)%=XJQ;(g[x]*=f[x]-num[z+1])%=XJQ;now=fa[now];}for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(y==fa[x]) continue;dfs2(y);}
}
int main()
{scanf("%lld%lld",&n,&k);for(ll i=1;i<n;i++){ll x,y;scanf("%lld%lld",&x,&y);addl(x,y);addl(y,x);}dfs(1);dfs2(1);for(ll i=1;i<=n;i++)printf("%lld ",f[i]);putchar('\n');for(ll i=1;i<=n;i++)printf("%lld ",g[i]);
}

牛客-乃爱与城市拥挤程度【树形dp】相关推荐

  1. 题解 乃爱与城市拥挤程度

    题目传送门:牛客 1100B Description 乃爱天下第一可爱! 乃爱居住的国家有 n n n 座城市,这些城市与城市之间有 n − 1 n-1 n−1 条公路相连接,并且保证这些城市两两之间 ...

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

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

  3. 牛客题单_动态规划课程状压dp习题

    牛客题单_动态规划课程状压dp习题 文章目录 牛客题单_动态规划课程状压dp习题 NC14732 锁 NC15034 德玛西亚万岁 NC16418 宝藏 NC17061 多彩的树 NC17890 方格 ...

  4. 牛客 牛牛爱喝酒(模拟)

    文章目录 1. 题目 2. 解题 1. 题目 链接:https://ac.nowcoder.com/acm/contest/9752/A 来源:牛客网 牛牛是一个酒鬼,非常爱喝酒, 一瓶酒m元钱, 两 ...

  5. 【牛客 - 696D】小K的雕塑(dp,鸽巢原理,01背包类问题)

    题干: 链接:https://ac.nowcoder.com/acm/contest/696/D 来源:牛客网 小K有n个雕塑,每个雕塑上有一个整数 若集合T中的每一个元素在n个雕塑上都能找得到,则称 ...

  6. 牛客小bai月赛39 F 孤独(dp)

    牛客小白月赛39 F 孤独 #include <bits/stdc++.h> using namespace std; typedef long long ll; int ans = IN ...

  7. 牛客挑战赛34 A 能天使的愿望 (dp 分组背包)

    链接:https://ac.nowcoder.com/acm/contest/2271/A 来源:牛客网 题目描述 出题人寄给大家的一些闲话:参加了CSP-J/S 2019 的同学,考的都怎么样啊?不 ...

  8. 牛客网 SQL24 各城市最大同时等车人数(困难类题目)

    描述 用户打车记录表tb_get_car_record id uid city event_time end_time order_id 1 108 北京 2021-10-20 08:00:00 20 ...

  9. 牛客小白月赛21 I I love you(dp的优化)

    题目链接 题目描述 此时相望不相闻,愿逐月华流照君. 一纸情书,到底蕴含了多少倍的爱情呢? I love you, not only for what you are, but for what I ...

最新文章

  1. Ruby已死——必须关注的内存问题
  2. 【Paper】2017_水下潜航器编队海洋勘测的协调控制方法研究
  3. Hystrix解决雪崩问题的两种手段
  4. Linux常用内建命令笔记
  5. 小程序根据手机机型设置自定义底部导航距离
  6. MTK驱动(77)---Android getevent用法
  7. ssh免密码远程执行sudo命令
  8. AJAX技术开发Back按钮问题的应用程序
  9. 编写可维护的 JavaScript
  10. pycharm 运行提示:@Error running ‘xx‘: Cannot run program “C:\Python27\python.exe“ (in directory “D:\...)
  11. 运筹系列10:线性规划开源软件GLPK和PyMathProg
  12. Python中的二维数组定义
  13. androidbenchmark和iphonebenchmark这两页面中设备信息爬虫
  14. RHCE——控制服务和守护进程
  15. 网站被qq拦截应该怎么处理
  16. 格力手机2 官方固件_ROG游戏手机2备货不足,官方发表致歉信
  17. java 民族_java简历 五年
  18. PTA 3+2转段 数据库 mysql (3篇)
  19. 测试用例 --- 注册163邮箱密码
  20. win7防火墙在哪里设置【系统天地】

热门文章

  1. c语言环境窗口组成,如何搭建C语言环境
  2. ppt扇形图怎么显示数据_前方高能!多维数据分析的神器雷达图PPT制作教程来啦!...
  3. mock java_JAVA的mock工具mockito简介
  4. 查询2021抚顺高考成绩,2021年抚顺高考状元是谁分数多少分,历年抚顺高考状元名单...
  5. [Redis6]Bitmaps与set对比
  6. [JavaWeb-HTTP]HTTP概念
  7. 高等数学下-赵立军-北京大学出版社-题解-练习9.4
  8. [C++STL]仿函数用法介绍
  9. 《C++ Primer》2.1.2节练习
  10. hash table(完全散列实现的哈希表)