[atARC121E]Directed Tree
令$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的更多相关文章
- HDOJ 3516 Tree Construction
四边形优化DP Tree Construction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- gym 100589A queries on the Tree 树状数组 + 分块
题目传送门 题目大意: 给定一颗根节点为1的树,有两种操作,第一种操作是将与根节点距离为L的节点权值全部加上val,第二个操作是查询以x为根节点的子树的权重. 思路: 思考后发现,以dfs序建立树状数 ...
- hdu3516 Tree Construction
Problem Description Consider a two-dimensional space with a set of points (xi, yi) that satisfy xi & ...
- CodeForces 1062E Company
Description The company \(X\) has \(n\) employees numbered from \(1\) through \(n\). Each employee \ ...
- CHANGE DETECTION IN ANGULAR 2
In this article I will talk in depth about the Angular 2 change detection system. HIGH-LEVEL OVERVIE ...
- Codechef Dynamic Trees and Queries
Home » Practice(Hard) » Dynamic Trees and Queries Problem Code: ANUDTQSubmit https://www.codechef.co ...
- 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 ...
- [hdu6990]Directed Minimum Spanning Tree
模板题:在有向图中,对每一个点求以其为根的最小(外向)生成树 (当图是强连通时)可以使用朱刘算法,算法过程如下: 1.对每一个节点,选择指向该点的边权最小的边,即得到一张子图 2.任选这张子图的一个简 ...
- 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 ...
随机推荐
- DL4J实战之四:经典卷积实例(GPU版本)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Vulnhub实战-DockHole_1靶机👻
Vulnhub实战-DockHole_1靶机 靶机地址:https://www.vulnhub.com/entry/darkhole-1,724/ 1.描述 我们下载下来这个靶机然后在vmware中打 ...
- Windows Terminal 和 WSL
Windows Terminal ,配置启动目录为 WSL : \\wsl$\Ubuntu\home
- K12教培从业者转型指南 换个赛道依然可以再创辉煌
随着"双减"政策的落地,属于K12教培机构的时代逐渐拉上帷幕,面对机会不再的K12教培行业,约70万机构和近千万的从业人员面临转型问题.压力之下,留下或离开?对广大K12教培机构从 ...
- Java项目中常用的的五大设计原则
今天我们一起来聊聊关于设计原则相关的知识点. SOLID五大原则是什么 SRP 单一责任原则 单一责任原则,从名字上我们就能比较好的去理解它.这项原则主张一个对象只专注于单个方面的逻辑,强调了职责的专 ...
- Linux常用命令介绍(满足日常操作)
大家好,今天来给大家分享一些Linux的常用命令,希望对大家有用 命令行的基本格式: 命令字 [选项] [参数] 其中,命令字.选项.参数之间用空格分开,多余的空格将被忽略.[ ]括起来的 ...
- win10安装git fatal: open /dev/null or dup failed: No such file or directory错误解决方法
原因看大家意思应该是 非即插即用驱动文件null.sys问题. 网上有很多方案.最后试了一个可行的. 替换 windows/system32/drivers/null.sys为网盘中的文件即可. 链 ...
- csp总结 (差点爆零的总结)
T1,iterator忘了怎么写了,想了很久都想不出来有什么可以替代,只好O(n^2): T2,不会,只会打暴力 T3,自以为是正解,写了很久大概3h,却一直过不了大样例,大样例输出全是0: T4,不 ...
- luogu P2746 [USACO5.3]校园网Network of Schools 题解
前言: 火星题... 但是我调了半天,最后看了题解才明白. Wtcl 解析: 显然先缩个点. 第一问,就是问多少入度为0的点. 第二问,抽象一下就是要添加一些边,让一个DAG变成一个SCC,求最小边数 ...
- Ubuntu 16.04 curl 安装 使用
curl是利用URL语法在命令行方式显工作的开元文件传输工具. 安装 $ sudo apt install -y curl 使用 $ curl http://www.baidu.com 这是最简单的使 ...