令$b_{a_{i}}=i$,那么问题即要求$i$不是$b_{i}$的祖先,也即$b_{i}$不严格在$i$的子树中

显然$a_{i}$和$b_{i}$一一对应,因此我们不妨统计$b_{i}$的个数

考虑容斥,令$f(S)$为$\forall i\in S,b_{i}$严格在$i$子树中的排列数,根据容斥答案即$\sum_{S\subseteq [1,n]}(-1)^{|S|}f(S)$

关于$f(S)$,可以从底往上依次确定$i\in S$的$b_{i}$,方案数即$\prod_{i\in S}sz_{i}-\sum_{x\in S且x在i的子树中}1$(其中$sz_{i}$为$i$的子树大小),最后对于$i\not\in S$的$b_{i}$没有限制,即$(n-|S|)!$种

对于后者,可以在树形dp中记录,即令$f_{i,j}$表示以$i$为根的子树中$\sum_{x\in S且x在i的子树中}1=j$的排列数,最终不难得到答案即$\sum_{i=1}^{n}(-1)^{i}(n-i)!f_{1,i}$

转移方程即$f_{i,j+k}=\sum f_{i,j}f_{son,k}$,最终再将$i$加入$S$,即$f_{i,j}=f_{i,j}+(sz_{i}-j)f_{i,j-1}$

时间复杂度为$o(n^{2})$,可以通过

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 2005
4 #define mod 998244353
5 struct Edge{
6 int nex,to;
7 }edge[N];
8 int E,n,x,ans,head[N],sz[N],g[N],f[N][N];
9 void add(int x,int y){
10 edge[E].nex=head[x];
11 edge[E].to=y;
12 head[x]=E++;
13 }
14 void dfs(int k){
15 f[k][0]=1;
16 for(int i=head[k];i!=-1;i=edge[i].nex){
17 dfs(edge[i].to);
18 memcpy(g,f[k],sizeof(g));
19 memset(f[k],0,sizeof(f[k]));
20 for(int j=0;j<=sz[k];j++)
21 for(int l=0;l<=sz[edge[i].to];l++)f[k][j+l]=(f[k][j+l]+1LL*g[j]*f[edge[i].to][l])%mod;
22 sz[k]+=sz[edge[i].to];
23 }
24 sz[k]++;
25 for(int i=sz[k];i;i--)f[k][i]=(f[k][i]+1LL*(sz[k]-i)*f[k][i-1])%mod;
26 }
27 int main(){
28 scanf("%d",&n);
29 memset(head,-1,sizeof(head));
30 for(int i=2;i<=n;i++){
31 scanf("%d",&x);
32 add(x,i);
33 }
34 dfs(1);
35 for(int i=0;i<=n;i++){
36 int s=1;
37 if (i&1)s=mod-1;
38 for(int j=1;j<=n-i;j++)s=1LL*s*j%mod;
39 ans=(ans+1LL*s*f[1][i])%mod;
40 }
41 printf("%d",ans);
42 }

[atARC121E]Directed Tree的更多相关文章

  1. HDOJ 3516 Tree Construction

    四边形优化DP Tree Construction Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  2. gym 100589A queries on the Tree 树状数组 + 分块

    题目传送门 题目大意: 给定一颗根节点为1的树,有两种操作,第一种操作是将与根节点距离为L的节点权值全部加上val,第二个操作是查询以x为根节点的子树的权重. 思路: 思考后发现,以dfs序建立树状数 ...

  3. hdu3516 Tree Construction

    Problem Description Consider a two-dimensional space with a set of points (xi, yi) that satisfy xi & ...

  4. CodeForces 1062E Company

    Description The company \(X\) has \(n\) employees numbered from \(1\) through \(n\). Each employee \ ...

  5. CHANGE DETECTION IN ANGULAR 2

    In this article I will talk in depth about the Angular 2 change detection system. HIGH-LEVEL OVERVIE ...

  6. Codechef Dynamic Trees and Queries

    Home » Practice(Hard) » Dynamic Trees and Queries Problem Code: ANUDTQSubmit https://www.codechef.co ...

  7. Codeforces Round #603 (Div. 2) F. Economic Difficulties dp

    F. Economic Difficulties An electrical grid in Berland palaces consists of 2 grids: main and reserve ...

  8. [hdu6990]Directed Minimum Spanning Tree

    模板题:在有向图中,对每一个点求以其为根的最小(外向)生成树 (当图是强连通时)可以使用朱刘算法,算法过程如下: 1.对每一个节点,选择指向该点的边权最小的边,即得到一张子图 2.任选这张子图的一个简 ...

  9. Is It A Tree?[HDU1325][PKU1308]

    Is It A Tree? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

随机推荐

  1. C++核心编程 3 函数提高

    函数默认参数 在C++中,函数的形参列表中的形参是可以有默认值的: 语法:返回值类型 函数名 (参数 = 默认值){ } 实例: #include<iostream> using name ...

  2. 洛谷2619/bzoj2654 Tree(凸优化+MST)

    bzoj的数据是真的水.. qwq 由于本人还有很多东西不是很理解 qwq 所以这里只写一个正确的做法. 首先,我们会发现,对于你选择白色边的数目,随着数目的上涨,斜率是单调升高的. 那么这时候我们就 ...

  3. Java(15)面向对象之继承

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201615.html 博客主页:https://www.cnblogs.com/testero ...

  4. NX7.5 使用UF_MODL_create_proj_curves创建投影曲线

    1 [DllImport("libufun.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet ...

  5. 使用ShardingSphere-JDBC完成Mysql的分库分表和读写分离

    1. 概述 老话说的好:选择比努力更重要,如果选错了道路,就很难成功. 言归正传,之前我们聊了使用 MyCat 实现Mysql的分库分表和读写分离,MyCat是服务端的代理,使用MyCat的好处显而易 ...

  6. UE4蓝图AI角色制作(四)之Gameplay调试器

    8. 寻路网格体和Gameplay调试器 为了及时识别出AI系统中的导航问题,UE4提供了一个工具用来解决这类问题,它叫Gameplay调试器.打开项目设置,在左侧找到"引擎",然 ...

  7. Golang通脉之流程控制

    流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的"经脉". Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码. ...

  8. PostMan生成的测试报告 工具node.js、步骤、结果

    Postman生成测试报告的工具node.js 1.下载并安装: win系统(下载后一直下一步就好了) mac系统  2.配置环境 (1).在命令提示符里面输入npm 检验安装是否成功可以输入命令:n ...

  9. VS2019 及 Visual Assist X 安装配置

    Visual Studio 2019 安装 下载 https://visualstudio.microsoft.com/zh-hans/downloads/ 安装 设置 扩大 Solution Con ...

  10. Scrum Meeting 15

    第15次例会报告 日期:2021年06月09日 会议主要内容概述: 开发工作接近尾声,接下来两天重点放在单元测试.调CSS和增加数据集数量上. 一.进度情况 我们采用日报的形式记录每个人的具体进度,链 ...