Codeforces #995F: Cowmpany Cowmpensation 题解

Codeforces 995F : Cowmpany Cowmpensation(容斥) 传送门 题解: 直接DP出fnfnf_n表示当前最大值为nnn的方案数。 然后gngng_n表示最大值为nnn,且种类数也为nnn的方案数。 确定最大值,之后的等式显然: fn=∑i=1n(n−1i−1)gifn=∑i=1n(n−1i−1)gif_n =\sum_{i=1}^n \binom{n-1}{i-1} g_i 反演出ggg后用组合数算方案即可。 #include &... 阅读详情

非常好的dp题
首先可以参见topcoder rooksparty的套路,就是我算这棵树的权值种数为i的方案数,最后乘CiDCDi就好
考虑dp[i][j]表示以i为根的子树,i的权值不超过j的方案数
我们发现这样会重复计数,因为我们计算了一些本质相同的方案,比如全1和全2,他们各自在乘CiDCDi的时候会把对方算进去
所以我们实际上要算的是本质不同的方案数
dp[i][j]所算的方案权值种数显然不会超过j,我们对于1号点,维护g[i]表示权值种数为i的方案有多少种,我们可以有

g[i]=dp[1][i]−∑j=1i−1g[j]∗Cjig[i]=dp[1][i]−∑j=1i−1g[j]∗Cij

要注意到在i的数据范围内扣除j要乘一个组合数
这样总复杂度O(n2)O(n2)
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <cstdlib>
#include <utility>
#include <cctype>
#include <algorithm>
#include <bitset>
#include <set>
#include <map>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <cmath>
#define LL long long
#define LB long double
#define x first
#define y second
#define Pair pair<int,int>
#define pb push_back
#define pf push_front
#define mp make_pair
#define LOWBIT(x) x & (-x)
using namespace std;

const int MOD=1e9+7;
const LL LINF=2e16;
const int INF=2e9;
const int magic=348;
const double eps=1e-10;
const double pi=3.14159265;

inline int getint()
{
    char ch;int res;bool f;
    while (!isdigit(ch=getchar()) && ch!='-') {}
    if (ch=='-') f=false,res=0; else f=true,res=ch-'0';
    while (isdigit(ch=getchar())) res=res*10+ch-'0';
    return f?res:-res;
}

inline LL mod(LL x) {while (x>=MOD) x-=MOD;while (x<0) x+=MOD;return x;}

vector<int> v[3048];
LL dp[3048][3048];
LL DP[3048];
LL c[3048][3048];

int n,d;

inline void dfs(int cur)
{
    int i,j,y;
    if (int(v[cur].size())==0)
    {
        for (i=1;i<=n;i++) dp[cur][i]=i;
        return;
    }
    for (i=0;i<int(v[cur].size());i++) dfs(v[cur][i]);
    for (i=1;i<=n;i++)
    {
        dp[cur][i]=1;
        for (j=0;j<int(v[cur].size());j++)
            dp[cur][i]=(dp[cur][i]*dp[v[cur][j]][i])%MOD;
        dp[cur][i]=mod(dp[cur][i]+dp[cur][i-1]);
    }
}


LL inv[3048],finv[3048];
inline void init_inv()
{
    inv[0]=inv[1]=finv[0]=finv[1]=1;
    for (register int i=2;i<=n;i++)
    {
        inv[i]=MOD-((long long)(MOD/i)*inv[MOD%i])%MOD;
        finv[i]=(finv[i-1]*inv[i])%MOD;
    }
}

inline void init_c()
{
    int i,j;
    c[0][0]=1;
    for (i=1;i<=n;i++)
    {
        c[i][0]=c[i][i]=1;
        for (j=1;j<=i-1;j++)
            c[i][j]=mod(c[i-1][j-1]+c[i-1][j]);
    }
}

inline LL C(int x,int y)
{
    LL res=1;
    for (register int i=x;i>=x-y+1;i--) res=(res*i)%MOD;
    res=(res*finv[y])%MOD;
    return res;
}

int main ()
{
    int i,j,x,y;n=getint();d=getint();
    for (i=2;i<=n;i++) x=getint(),v[x].pb(i);
    init_inv();init_c();
    dfs(1);
    DP[1]=1;
    for (i=2;i<=n;i++)
    {
        DP[i]=dp[1][i];
        for (j=1;j<=i-1;j++)
            DP[i]=mod(DP[i]-(DP[j]*c[i][j])%MOD);
    }
    LL ans=0;
    for (i=1;i<=min(d,n);i++) ans=mod(ans+(DP[i]*C(d,i))%MOD);
    printf("%lld\n",ans);
    return 0;
}
电路分析:戴维宁与叠加定理 2 大核心方法详解与 3 道典型大题解析 在实验室调试电路时,我习惯先用戴维宁等效预测电路行为,再通过实际测量验证。这种方法曾帮助我快速定位过一个隐藏的阻抗匹配问题——理论计算显示最大功率传输时应为50Ω,但实测最佳点却在55Ω,最终发现是连接线阻抗被忽视。电路分析是电气工程领域的基石,而戴维宁定理与叠加定理则是解决复杂电路问题的两把利剑。提示:考试中常设置两种方法均可解的题目,建议先用戴维宁求解,再用叠加验证,可有效避免计算错误。其数学本质是线性系统的可加性。注意:交流电路中使用叠加定理时,各分响应的相位关系至关重要,建议配合相量图辅助分析。 阅读详情

相关推荐

FOC控制必看:单/双/三电阻电流采样方案全对比(附NXP实战避坑指南)

本文深入对比了FOC控制中单电阻、双电阻和三电阻电流采样方案的优劣与适用场景,重点剖析了采样时序、窗口与ADC转换的工程挑战。针对NXP平台,提供了解决采样窗口过窄的实战方案与配置指南,帮助工程师根据成本与性能需求做出最优选择,并规避常见设计陷阱。

n2o3p4的博客 413

codeforces 995 F. Cowmpany Cowmpensation 树形dp,或多项式插值

codeforces 995 F. Cowmpany Cowmpensation 题解 首先想到把权值离散化,如果知道总共用了i种权值,方案数*C(D,i) 一开始我的想法是dp[i][j],记录子树中有多少种不同权值(分级),但是这样合并的时候需要枚举重复的个数,只能是n^3 换个角度看dp,思想一样,但是我们可以重新定义dp[i][j],根结点i的权值不超过j 注意这里的权值范围是1-n,而不...

执子之手,与子偕老 358

智能驾驶功能软件平台设计规范 第一部分:系统架构

智能驾驶功能软件平台设计规范 第一部分:系统架构2020-07-29 发布。

爱是与世界平行 6744

sap 个模块 含义 FI/CO/MM/PP/QM/WM 及其它 分别指什么模块?是干什么用的?

FI(Financial Accounting 财务会计):应收、应付、总帐、固定资产、投资、基金、现金等. CO(Controlling 成本控制):利润及成本中心,产品成本、项目会计、获利分析等. MM(Material Management 物流管理):采购、库房管理、库存管理、MRP、供应商评价等. PP(Production Planning 生产计划):工厂数据、生产计划、MRP

洋葱o的博客 3万+

Grok-1.5+Ollama企业级本地化部署与合规实践指南

本文详细介绍了Grok-1.5+Ollama企业级本地化部署与合规实践指南,重点分析了本地化部署的成本优势和数据主权保障。通过RTX 4090显卡的硬件选型、Ubuntu 22.04系统优化及部署流程中的关键陷阱规避,为企业提供了高效、安全的AI模型部署方案。特别适合金融、医疗等敏感行业。

weixin_29094539的博客 182

ROC-RK3588S-PC 刷机 安装Android系统

rk3588刷机,装系统

Wjz_www的博客 4835

Codeforces 995F Cowmpany Cowmpensation 拉格朗日插值法

题意 有一棵树,现在要给每个节点赋一个在1到D之间的权值,问有多少种方案满足任意一个节点的权值都不大于其父亲的权值。 n≤3000,D≤109n≤3000,D≤109n\le3000,D\le10^9 分析 有一个十分显然的O(nD)O(nD)O(nD)的做法,但显然不能过。 有个结论就是,对于一棵n个节点的数,其答案一定是关于D的一个n次多项式。 这个可以通过归纳法来证明。 那...

beginend 1317

【ES】--Elasticsearch的分词器深度研究

分词器是ik_max_word,会将“龙马家书”拆分为“龙马”、“马家”、“家书”。然后filter配置的是edge_ngram_filter,在上面拆分的token词组基础上,按照edge_ngram_filter规则进一步拆分。从结果看:分词器是keyword,filter支持edge_ngram_filter,字符过滤器支持tsconvert【简繁体】。分词器是keyword,表明是不进行分词,但filtet中edge_ngram_filter是按照布长方式拆分token,所以得到如此结果。

寻梦友的博客 2435

Codeforces 995F Cowmpany Cowmpensation

题解:一般对于多种颜色染色(染色数很大&gt;=1e8),并且染色的点很少的时候(点数&lt;=3000)。设点数为1.可以先求出染色数(1~n+1)时所有的函数值,这样不管是对f()函数求和,还是非求和都能适用。然后套用拉格朗日差值的公式即可。f函数用dp预处理即可。 拉格朗日公式 #include"bits/stdc++.h" using namespace std; typedef l...

qq_18869763的博客 295

射频电路设计——射频器件基础

本文仅供自己复习使用,请勿转载! 射频电路制作方法 MCM工艺 CMOS工艺 趋肤效应、深度 频率越高趋肤效应越明显 高频器件 高频电阻 绕线的比贴片的多一个电感,是因为绕线的因为是线绕制的,只有有线就会有电感,所以绕线电阻等效模型会比贴片的多一个电感 多晶硅电阻模型 深线性区MOS电阻 高频电阻的频率响应 记忆的话就后面的频率特性有点像电容的 高频电容 作用 单层贴片式电容 多层贴片式电容 MIM电容 MOM电容 由于是并联的,所以总的电容值是单个的直接相加 PN结电容 M.

输出每日所学,供大家学习使用 7150

Livox激光雷达传感器在Python3中的完整驱动程序:深入剖析OpenPyLivox库的实现和应用

当我们提到激光雷达或激光扫描技术时,Livox激光雷达传感器无疑是业界的佼佼者。尽管Livox提供了基于C++的官方软件和API,但现在,有了OpenPyLivox (OPL) 库,Python开发者们也能够轻松地接入和控制这些高级的激光雷达设备。

qq_38334677的博客 1002

codeforces 884F 费用流,图解很清晰

代码: #include using namespace std; const int inf = 1e9; const int mm = 111111; const int maxn = 2999; int node,src,dest,edge; int ver[mm],flow[mm],cst[mm],nxt[mm]; int head[maxn],work[maxn],dis[maxn],

SUNSET 1461

【HYSPLIT 教程第二期】Inline WRF-HYSPLIT 耦合

【HYSPLIT 教程第二期】Inline WRF-HYSPLIT 耦合

WW、forever的博客 810

CodeForces - 995E Number Clicker (双向BFS)

题意:给出u,v,p,对u可以进行三种变化: 1.u=(u+1)%p ; 2.u = (u+p-1)%p; 3.u = 模p下的逆元。问通过几步可以使u变成v,并且给出每一步的操作。 分析:朴素的bfs或dfs会超时或炸栈,考虑用双向bfs头尾同时搜。用map存每个数的访问状态和对应的操作编号,正向搜步长为正,反向搜步长为负。反向搜的时候要注意对应加减操作是反过来的。 #include&...

weixin_30407099的博客 252

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

[CF995F]Cowmpany Cowmpensation[树形dp+拉格朗日插值]

题意 给你一棵树,你要用不超过 \(D\) 的权值给每个节点赋值,保证一个点的权值不小于其子节点,问有多少种合法的方案。 \(n\leq 3000, D\leq 10^9\) 分析 如果 \(D\) 比较小的话可以考虑状态 \(f_{i,j}\) 表示点 \(i\) 的权值是 \(j\) 的方案总数,\(g_{i,j}\) 表示 \(\sum_\limits{k=1}^jf_{i,j}...

aqw145212的专栏 206

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

[CF995F] Cowmpany Cowmpensation(树形dp,拉格朗日插值)

树形DP: 设f[u][i]f[u][i]f[u][i]表示给uuu的子树分配工资,uuu点工资为iii的方案数 f[u][i]=∏v∈sonu(∑j=1if[v][j])f[u][i]=\prod\limits_{v\in son_u}(\sum\limits_{j=1}^{i}f[v][j])f[u][i]=v∈sonu​∏​(j=1∑i​f[v][j]) 前缀和优化: 设g[u][i]=∑j=1if[u][j]g[u][i]=\sum\limits_{j=1}^{i}f[u][j]g[u][i]=j=

Edward The Bunny 的博客 258

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【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...

araw94333的博客 181

【CF995F】Cowmpany Cowmpensation(多项式插值)

题面 洛谷 CF 题解 我们假装结果是一个关于DDD的nnn次多项式, 那么,先dpdpdp暴力求解颜色数为0..n0..n0..n的所有方案数 这是一个O(n2)O(n2)O(n^2)的dpdpdp 然后直接做多项式插值就好了,公式戳这里 #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstdlib...

小蒟蒻yyb的博客 518

CF995F Cowmpany Cowmpensation

CF995F Cowmpany Cowmpensation 题意 给定一棵树,你要给每个点定一个 [1,D][1,D][1,D] 的权值,满足每个点权值不大于父亲。问有多少种方案,答案模 109+710^9 + 7109+7 题解 首先考虑一个暴力的DP f[u][i]表示以u为根的子树,用[1,i]染色的方案数f[u][i]表示以u为根的子树,用[1,i]染色的方案数f[u][i]表示以u为根的子树,用[1,i]染色的方案数 显然f[u][i]=f[u][i−1]+∏f[v][i]显然f[u][i]=f[

lahlah的博客 450

【CF995F】Cowmpany Cowmpensation(动态规划,拉格朗日插值)

【CF995F】Cowmpany Cowmpensation(多项式插值) 题面 洛谷 CF 题解 我们假装结果是一个关于\(D\)的\(n\)次多项式, 那么,先\(dp\)暴力求解颜色数为\(0..n\)的所有方案数 这是一个\(O(n^2)\)的\(dp\) 然后直接做多项式插值就好了,公式戳这里 #include<iostream> #include<cstdio>...

weixin_30779691的博客 191

F. Cowmpany Cowmpensation(树形dp + 拉格朗日插值)

F. Cowmpany Cowmpensation 首先一般dp推导dp[i][j]=∏u∈soni∑k=1jdp[v][k]dp[i][j] = \prod\limits_{u \in son_i} \sum\limits_{k = 1} ^{j} dp[v][k]dp[i][j]=u∈soni​∏​k=1∑j​dp[v][k] 这个是毫无疑问的,然后我们考虑如何得到d≥nd \geq nd≥n的情况。 我们给定一个出了1号节点全是叶节点的情况,显然在根节点的统计也就是一个关于叶节点个数的多项式,当我们对

lifehappy 427

codeforces 955F Cowmpany Cowmpensation 树上DP+多项式插值

给一个树,每个点的权值为正整数,且不能超过自己的父节点,根节点的最高权值不超过D 问一共有多少种分配工资的方式? 题解: A immediate simple observation is that we can compute the answer in $O(nD) $with a simple dynamic program. How to speed it up though? T...

weixin_30315723的博客 197

Codeforces 995 E - Number Clicker

E - Number Clicker 思路:双向搜索 代码: #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define LL long long //#define mp make_pair #defi...

weixin_34101229的博客 161

codeforces 995-B. Suit and Tie(暴力+思维)

http://codeforces.com/problemset/problem/995/B 题目大意: 有1~n的n对数字任意排列,每次操作可以将任意相邻的两个数进行对换,问最少需要多少次操作使得每一对数字都相邻? 解题思路: 因为需要每一对数字都相邻,那么不重复的数字一定在奇数位,因此可以从头枚举每一个不重复的数字,记录已经配好对的数字,用vis数组标记,然后对还...

HJ 807

SRM 473

昨天写了SRM474的部分题解,打算把这个坚持写下去,主要还是前两题,hhanger大牛说了,狂刷500的题就能红,狂刷1000就能Target,Target不敢奢望,把去年这个时候的设想实现了,能黄就行。。。DIV2250P OnTheFarmDivTwo两种动物,一种是鸡,一种是牛,有3个头,8条腿,这样就是有2只鸡,1头牛。给出头数和腿数,问分别有多少只鸡,多少头牛。小学数学题,x, y代表鸡和牛数,联立方程组,消去x,得到y的表达式,注意要整除和不能为负。500P SequenceOfCommand

mwkfeng的专栏 533

Codeforces 995 B

B. Suit and Tie time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Allen is hosting a formal dinner party. 2n2n people come to the e...

swqeaaa的博客 295
上一篇: Codeforces #838D: Airplane Arrangement 题解
下一篇: POJ1637: Sightseeing tour 题解
IcePrincess_1968
博客等级 码龄9年 13粉丝 182原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值