Codeforces F. Cowmpany Cowmpensation
Description
有一棵树,现在要给每个节点赋一个在1到D之间的权值,问有多少种方案满足任意一个节点的权值都不大于其父亲的权值。
n<=3000,D<=1e9
题面
Solution
容易发现 \(f(D)\) 是一个 \(n\) 次多项式.
求出 \(f(1),f(2),...,f(n+1)\) 之后拉格朗日插值即可.
#include<bits/stdc++.h>
using namespace std;
const int N=3010,mod=1e9+7;
int n,m,head[N],to[N*2],nxt[N*2],fa[N],num=0,f[N][N],inv[N];
inline void link(int x,int y){nxt[++num]=head[x];to[num]=y;head[x]=num;}
inline void dfs(int x){
	for(int i=1;i<=n+1;i++)f[x][i]=1;
	for(int i=head[x],u;i;i=nxt[i]){
		if((u=to[i])==fa[x])continue;
		dfs(u);
		int sum=0;
		for(int j=1;j<=n+1;j++){
			sum=(sum+f[u][j])%mod;
			f[x][j]=1ll*f[x][j]*sum%mod;
		}
	}
}
int main(){
  freopen("pp.in","r",stdin);
  freopen("pp.out","w",stdout);
  cin>>n>>m;
  for(int i=2;i<=n;i++)cin>>fa[i],link(fa[i],i);
  dfs(1);
  for(int i=2;i<=n+1;i++)f[1][i]=(f[1][i]+f[1][i-1])%mod;
  if(m<=n+1)cout<<f[1][m],exit(0);
  inv[0]=inv[1]=1;
  for(int i=2;i<=n;i++)inv[i]=(mod-1ll*(mod/i)*inv[mod%i]%mod)%mod;
  int ans=0;
  for(int i=1;i<=n+1;i++){
	  int t=1;
	  for(int j=1;j<=n+1;j++){
		  if(i==j)continue;
		  t=1ll*t*(m-j)%mod*(i>=j?inv[i-j]:-inv[j-i])%mod;
	  }
	  ans=(ans+1ll*t*f[1][i])%mod;
  }
  cout<<(ans+mod)%mod;
  return 0;
}
Codeforces F. Cowmpany Cowmpensation的更多相关文章
- Codeforces 995F Cowmpany Cowmpensation - 组合数学
		题目传送门 传送点I 传送点II 传送点III 题目大意 给定一个棵$n$个点的有根树和整数$D$,给这$n$个点标号,要求每个节点的标号是正整数,且不超过父节点的标号,根节点的标号不得超过D. 很容 ... 
- codeforces 955F  Cowmpany Cowmpensation 树上DP+多项式插值
		给一个树,每个点的权值为正整数,且不能超过自己的父节点,根节点的最高权值不超过D 问一共有多少种分配工资的方式? 题解: A immediate simple observation is that ... 
- 【cf995】F. Cowmpany Cowmpensation(拉格朗日插值)
		传送门 题意: 给出一颗树,每个结点有取值范围\([1,D]\). 现在有限制条件:对于一个子树,根节点的取值要大于等于子数内各结点的取值. 问有多少种取值方案. 思路: 手画一下发现,对于一颗大小为 ... 
- F. Cowmpany Cowmpensation dp+拉格朗日插值
		题意:一个数,每个节点取值是1-d,父亲比儿子节点值要大,求方案数 题解:\(dp[u][x]=\prod_{v}\sum_{i=1}^xdp[v][i]\),v是u的子节点,先预处理出前3000项, ... 
- 【CF995F】 Cowmpany Cowmpensation
		CF995F Cowmpany Cowmpensation Solution 这道题目可以看出我的代码能力是有多渣(代码能力严重退化) 我们先考虑dp,很容易写出方程: 设\(f_{i,j}\)表示以 ... 
- 【CF995F】Cowmpany Cowmpensation(动态规划,拉格朗日插值)
		[CF995F]Cowmpany Cowmpensation(多项式插值) 题面 洛谷 CF 题解 我们假装结果是一个关于\(D\)的\(n\)次多项式, 那么,先\(dp\)暴力求解颜色数为\(0. ... 
- 【CF995F】Cowmpany Cowmpensation
		[CF995F]Cowmpany Cowmpensation 题面 树形结构,\(n\)个点,给每个节点分配工资\([1,d]\),子节点不能超过父亲节点的工资,问有多少种分配方案 其中\(n\leq ... 
- [CF995F]Cowmpany Cowmpensation
		codeforces description 一棵\(n\)个节点的树,给每个节点标一个\([1,m]\)之间的编号,要求儿子的权值不大于父亲权值.求方案数.\(n\le3000,n\le10^9\) ... 
- [CF995F]Cowmpany Cowmpensation[树形dp+拉格朗日插值]
		题意 给你一棵树,你要用不超过 \(D\) 的权值给每个节点赋值,保证一个点的权值不小于其子节点,问有多少种合法的方案. \(n\leq 3000, D\leq 10^9\) 分析 如果 \(D\) ... 
随机推荐
- Devexpress GridControl无限高度惹得祸
			异常提示: issue, place the grid into a container that will give a finite height to the grid, or manually ... 
- 关于EF的一点小记录
			今日新闻:朝鲜要改革开放了!!!比你牛逼的人都在努力,你还有理由懒惰吗? 宇宙强大IDE配套的EF问题记录 今天做数据添加时,Id我设置为int类型了,结果在做Add操作时报的错让我摸不着头脑,后来问 ... 
- Android中Textview显示Html,图文混排,支持图片点击放大
			本文首发于网易云社区 对于呈现Html文本来说,Android提供的Webview控件可以得到很好的效果,但使用Webview控件的弊端是效率相对比较低,对于呈现简单的html文本的话,杀鸡不必使用牛 ... 
- 基于GeoServer切片地图服务的发布
			接着上一篇文章,如何将JPG格式的图片转化为带地理坐标的TIFF格式里提及的最近的一个项目,数据源是一张高分辨率的2.5维图片,现在已经成功转化成了带有地理坐标的TIFF格式.下面将介绍借助GeoSe ... 
- fatal: Not a git repository (or any parent up to mount point /home)
			问题:fatal: Not a git repository (or any parent up to mount point /home) 解决:git init 
- java学习笔记—JDBC1(16)
			1.数据持久化 l 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用,也称为“固化”.在大多数情况下,服务器或客户端应用中数据的持久化是通过关系型数据库来实现 l 存储 ... 
- Python Pymongo中Connection()与MongoClient()差异
			在git找了几个blog的源码,在学习的过程中,发现有人使用Connection(),有人却在使用MongoClient(),那么到底两者有什么差别呢? 且看分析如下: db = Connection ... 
- extjs Tree中避免连续单击会连续请求服务器
			应用场景:在项目中我要做一个左边是tree,右边是panel的界面.当我单击tree中的一条记录时,发送请求,并将结果显示在右边的panel中.做完之后发现,如果连续单击就会连续请求两次服务器,毕竟用 ... 
- Es6 类class的关键 super、static、constructor、new.target
			ES6引入了Class(类)这个概念,作为对象的模板,通过class关键字,可以定义类.基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对 ... 
- 编程开发之--java多线程学习总结(5)
			4.对继承自Runnable的线程进行锁机制的使用 package com.lfy.ThreadsSynchronize; import java.util.concurrent.locks.Lock ... 
