【CF995F】 Cowmpany Cowmpensation
CF995F Cowmpany Cowmpensation
Solution
这道题目可以看出我的代码能力是有多渣(代码能力严重退化)
我们先考虑dp,很容易写出方程:
设\(f_{i,j}\)表示以\(i\)为根的子树中\(i\)的值为\(j\),那么转移为:
\[
\begin{aligned}
f_{i,j}=\prod_{v\in son_u}\sum_{k=1}^j{f_{v,j}}
\end{aligned}
\]
这个东西很明显可以前缀和优化变成\(O(n^2)\)的求解.
当然不会告诉你我dp写挂了然后身败名裂啊
发现进一步的优化.
这个东西如果全用前缀和搞起来不就很像一个函数了?(把每一项出现的拆开考虑)
emmm,好像是的.
那么显然这个东西可以通过点值确定这个函数,然后就是喜闻乐见的拉格朗日插值了.
但是为什么可以成为一个可确定性的函数呢(就是复杂度比较合适).
考虑叶子节点如果有的话肯定是一次函数.
emmm,如果深度增加,显然就会高一次.
深度最大是\(n\),所以应该只要确定\(n\)个点就可以了.
那么就很愉快的写完了.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<iostream>
using namespace std;
#define ll long long
#define re register
#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
#define int ll
inline int gi()
{
int f=1,sum=0;char ch=getchar();
while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
return f*sum;
}
const int N=3010,Mod=1e9+7;
int dp[N][N],front[N],to[N<<1],nxt[N<<1],cnt,sum[N][N],n,x[N],y[N];
int Pow(int a,int b)
{
int ret=1;
while(b)
{
if(b&1)ret=(ret*a)%Mod;
a=(a*a)%Mod;b>>=1;
}
return ret;
}
int lalr(int k)
{
int ans=0;
for(int i=1;i<=n;i++)
{
int Up=1,Down=1;
for(int j=0;j<=n;j++)
if(i!=j)
{
(Up*=(k-x[j]))%=Mod;
(Down*=(x[i]-x[j]))%=Mod;
}
(ans+=(y[i]*Up)%Mod*Pow(Down,Mod-2))%=Mod;
}
return ans;
}
void Add(int u,int v)
{
to[++cnt]=v;nxt[cnt]=front[u];front[u]=cnt;
}
void dfs(int u)
{
for(int i=1;i<=n;i++)dp[u][i]=1;
for(int i=front[u];i;i=nxt[i])
{
int v=to[i];
dfs(v);
for(int j=1;j<=n;j++)
dp[u][j]=(ll)dp[u][j]*dp[v][j]%Mod;
}
for(int i=1;i<=n;i++)
dp[u][i]=(dp[u][i]+dp[u][i-1])%Mod;
}
void init()
{
dfs(1);
}
signed main()
{
int d;
n=gi();d=gi();
for(int i=2;i<=n;i++)
{
int Fa=gi();
Add(Fa,i);
}
init();
if(d<=n)return printf("%lld\n",dp[1][d]),0;
for(int i=1;i<=n;i++)x[i]=i,y[i]=dp[1][i];
printf("%lld\n",lalr(d));
return 0;
}
【CF995F】 Cowmpany Cowmpensation的更多相关文章
- 【CF995F】Cowmpany Cowmpensation(动态规划,拉格朗日插值)
[CF995F]Cowmpany Cowmpensation(多项式插值) 题面 洛谷 CF 题解 我们假装结果是一个关于\(D\)的\(n\)次多项式, 那么,先\(dp\)暴力求解颜色数为\(0. ...
- 【CF995F】Cowmpany Cowmpensation
[CF995F]Cowmpany Cowmpensation 题面 树形结构,\(n\)个点,给每个节点分配工资\([1,d]\),子节点不能超过父亲节点的工资,问有多少种分配方案 其中\(n\leq ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- Python高手之路【一】初识python
Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...
随机推荐
- 软件测试基础Ⅲ(osi7层协议,测试模型,LoadRunner组件,软件质量模型)
osi7层开放式系统互连网络模型 1.物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的 ...
- pycharm显示Unresolved reference
状态:已解决 原因:不知道怎么表达 解决方法:重装django,,,,,,,,,,,,,,,,,,,
- 设置vue启动项目后默认显示的页面
通过配置路由,可以设置vue项目启动后默认显示的页面.路由的path设置为path:"/",启动项目后就会显示默认的组件页面. import Vue from 'vue' impo ...
- c# richTextBox1添加内容并将滚动条滚动到当前焦点处
1. StringBuilder sb = new StringBuilder(); StringBuilder的改变比string快多了 2. sb.Append("\r\n" ...
- abaqus学习笔记-abaqus与umat调用基本原理
参考: 1.http://ivt-abaqusdoc.ivt.ntnu.no:2080/v6.14/books/sub/default.htm 2.ABAQUS 用户材料子程序开发及应用-杨曼娟 3. ...
- DIV+CSS中标签ul ol li dl dt dd用法
ul ol li dl dt dd都是DIV+CSS做网页长用的东西,相当于一棵树的树技,下面就了解一下这些东西的全体用法,本人用dd,dt,dd用得很少,懂得结合使用对做架构是很有好处的哦! DIV ...
- 阿里云oss视频上传不能在线播放,js,javascript,在线播放器,插件
网页视频播放插件 发现阿里云oss储存,上传了视频不能在线播放. 解决方法:使用插件播放即可解决. <html> <head> <meta charset="u ...
- nginx 下载 大文件被截断
如果出现大文件被截断,且ngix的日志大量出现以下类似报错: 则说明是nginx没有fastcgi_temp的读写权限.其中fastcgi_temp是自己的文件夹名称,每个人的不同且路径也会不同,这个 ...
- C#-委派和事件
委派代表一个方法.当不知道后面的方法名称时,可用委派先声明,待使用方法时,再在委派实例化时写入方法名称. 先声明, public delegate int delegateClassName (参数列 ...
- html部分常用标签的含义及作用
1.a 超链接 <a> 标签定义超链接,用于从一张页面链接到另一张页面.<a> 标签中必须提供 href 属性或 name 属性,它指示链接的目标. 例如:点击 百度一下 跳转 ...