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

正题

题目链接: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>ysizy,z1
然后那么我们每个点的答案我们就只需要计算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,kzsizfaz1,kz1

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

依旧先考虑子树定义mulx,zmul_{x,z}mulx,z表示距离为zzzxxx点子树中的值(注意不能计算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,z1sizy,z1)

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

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

时间复杂度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]);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot2.1.9 MongoDB的聚合连接

LookupOperation lookupOperation LookupOperation.newLookup().from(AdminRepository.instance().getTableName()). //关联从表名localField(User.Fields.name). //主表关联字段foreignField(Admin.Fields.name).//从表关联的字段as("adminInfo"); //查询结果…

节操大师 北方大学生程序设计竞赛 南开大学

Description MK和他的小伙伴们&#xff08;共n人&#xff0c;且保证n为2的正整数幂&#xff09;想要比试一下谁更有节操&#xff0c;于是他们组织了一场节操淘汰赛。他们的比赛规则简单而暴力&#xff1a;两人的节操正面相撞&#xff0c;碎的一方出局&#xff0c;而没碎的一方晋…

牛客-仓鼠的石子游戏【博弈论】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1100/A 题目大意 nnn个环&#xff0c;第iii个环有aia_iai​个珠子。要求涂色时没有相邻的同色。 两个人轮流涂色&#xff0c;直到一个人无法涂色为止。 解题思路 其实先手后手的胜利与他们的操作没有任何关系。 考虑一个…

Window7 docker安装

一、下载docker toolbox docker-toolbox-windows-docker-toolbox安装包下载_开源镜像站-阿里云 -ce后缀的是免费的版本&#xff0c;其他是收费版本 二、安装 安装完成即可 三、启动docker 双击 Docker Quickstart Terminal启动 其他问题&#xff1a; 启动拉boot2docker镜像失…

aspnetcore.webapi实践k8s健康探测机制 - kubernetes

1、浅析k8s两种健康检查机制Liveness k8s通过liveness来探测微服务的存活性&#xff0c;判断什么时候该重启容器实现自愈。比如访问 Web 服务器时显示 500 内部错误&#xff0c;可能是系统超载&#xff0c;也可能是资源死锁&#xff0c;此时 httpd 进程并没有异常退出&#xff…

dp 树状数组 逆序元组

wmq的队伍 发布时间: 2017年4月9日 17:06 最后更新: 2017年4月9日 17:07 时间限制: 2000ms 内存限制: 512M 描述 交大上课需要打卡&#xff0c;于是在上课前的几分钟打卡机前往往会排起长队。 平时早睡早起早早打卡的wmq昨晚失眠&#xff0c;今天起晚了&#xff0c;于是他…

牛客-服务器需求【线段树】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1101/A 题目大意 nnn天第iii天需要aia_iai​台机器&#xff0c;每台机器可以工作mmm天。qqq次修改&#xff0c;每次修改一个aia_iai​&#xff0c;求每次修改后至少需要雇佣多少台机器。 解题思路 很容易想到答案就是max{…

快速搭建CentOS+ASP.NET Core环境支持WebSocket

以前用python&#xff0c;go尝试在linux下做web服务&#xff0c;python没有强类型支持与高性能&#xff0c;go又没有很好的集成开发环境&#xff08;还有强迫症的语法&#xff09;&#xff0c;回头看了几次.net&#xff0c;都没有时间尝试&#xff0c;现终于实现了这些想法&…

博客文章列表(一)——JAVA

一、成长系列 面试 详情列表 编程难题 详情列表 java总结 详情列表 java技能 详情列表 java面…

Cube Or 北方大学生训练赛

Cube Or Time Limit: 2000/2000 MS(Java/Others) Memory Limit: 262144/262144 K(Java/Others) Problem Description : Given you N Integers ai (1≤i≤N) , you can do thefollowing operation: pick out …

牛客-沙漠点列【tarjan】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1101#question 题目大意 nnn个点mmm条边的沙漠(所有联通子图都是仙人掌)&#xff0c;删除kkk个点使得剩下的连通块最多。 解题思路 对于图上的每条割边&#xff0c;删去之后就可以多出一个联通块&#xff0c;所以我们就可…

来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor

在今年年初, 恰逢新春佳节临近的时候. 微软给全球的C#开发者们, 着实的送上了一分惊喜. 微软正式开源Blazor &#xff0c;将.NET带回到浏览器.这个小惊喜, 迅速的在dotnet开发者中间传开了. 而就在昨天(2018年3月22日) Blazor发布了它的第一次Release. Blazor到底是个什么样的东…

博客文章列表(二)——算法、数据结构、数据库、ABCD

七、编程基础 数据结构 详情列表 算法 详情列表 算法.排序 详情列表 算法.加密 详情列…

A*B NTT快速数论变换

wmq的AB Problem 发布时间: 2017年4月9日 17:06 最后更新: 2017年4月9日 17:07 时间限制: 3000ms 内存限制: 512M 描述 这是一个非常简单的问题。 wmq如今开始学习乘法了&#xff01;他为了训练自己的乘法计算能力&#xff0c;写出了n个整数&#xff0c;并且对每两个数a,…

51nod-猴猴吃苹果【线段树】

正题 题目链接:https://www.51nod.com/Contest/ProblemList.html#contestId188&randomCode291765 题目大意 nnn个点的一棵树&#xff0c;从kkk节点出发&#xff0c;每次走到最远的一个节点(路上点最多,如果有多个就编号最小的)并将路上的点权变为0&#xff0c;求会依次到达…

北方大学 ACM 多校训练赛 第十五场 蜘蛛牌A

题目描述 XCX最近迷上了玩蜘蛛牌。蜘蛛牌是windowsxp操作系统自带的一款纸牌游戏&#xff0c;游戏规则是这样的&#xff1a;只能将牌拖到比它大一的牌上面&#xff08;A最小&#xff0c;K最大&#xff09;&#xff0c;如果拖动的牌上有按顺序排好的牌时&#xff0c;那么这些牌也…

dotnet watch+vs code提升asp.net core开发效率

在园子中&#xff0c;已经又前辈介绍过dotnet watch的用法&#xff0c;但是是基于asp.net core 1.0的较老版本来讲解的&#xff0c;在asp.net core 2.0的今天&#xff0c;部分用法已经不太一样&#xff0c;所以就再写一篇文章来介绍dotnet watch vs code来提升asp.net core开发…

51nod-猴猴吃香蕉【dp】

正题 题目链接:https://www.51nod.com/Contest/Problem.html#contestProblemId1149 题目大意 nnn个数&#xff0c;求有多少种选择方案使选择的数乘机为kkk。 解题思路 显然kkk的质因数最多只有999个&#xff0c;我们将质因数进行dpdpdp。若选择的数的质因数刚好是kkk的质因数…

北方大学 ACM 多校训练赛 第十五场 数字游戏

本题的意思是&#xff0c;给你1/2&#xff0c;1/2&#xff0c;1&#xff0c;2&#xff0c;4……2^&#xff08;k-1&#xff09; &#xff0c;让你在左边的数列中添加号或者-号&#xff0c;使得最终的答案为n即可。 思路&#xff1a; 我们知道上面这些数直接如果全部都填号的话…

ASP.NET Core + Docker + Jenkins + gogs + CentOS 从零开始搭建持续集成

没有采用gitlab&#xff0c;因为gitlab比较吃配置。也比较重&#xff0c;用不到那么多功能。采用go语言开发的gogs来代替。免费HTTPS证书安装Gogs (一个gitserver&#xff0c;类似于gitlab)安装DockerDocker配置加速器 一定要配置&#xff0c;用官方的源会让你体会到什么叫做绝…