个人思路:

一棵树也只有一个 \(a=-1\) 的点,所以可以把它看做一个点,但是要记录点的大小 \(sz_i\),即为这棵树的大小。如果本来就是一个点,那么大小为 \(1\)。

状态:\(dp_{i,j}\) 表示前 \(i\) 个点已确定,已产生 \(j\) 个连通块的方案数。

转移:\(dp_{i,j} = dp_{i-1,j-1} \times sz_i + dp{i-1,j} \times (n-sz_i)\)。

这个状态如果选择了后面的点,会直接影响后面的点的大小,不可做。

然后就不会了。

正解:

设 \(a=-1\) 的点共有 \(m\) 个。

\(k\) 个点 \(x_1,x_2,\dots ,x_k\) 构成一个环,有 \((k-1)! \times \prod\limits_{i=1}^k sz_{x_i}\) 种方案数,因为每个点下一个连接的点形成的排列有 \((k-1)!\) 种,而每个点中有 \(sz_i\) 种选择。

剩下的随便选,每种环在所有方案中出现了 \(n^{m-k}\) 次。那么这 \(k\) 个点构成的环对答案的贡献为 \((k-1)! \times \prod\limits_{i=1}^k sz_{x_i} \times n^{m-k}\)。

显然,我们可以把任选 \(k\) 个点的 \(sz_i\) 乘积之和算出来,可以 \(\Theta(n^2)\) 递推,具体看代码。

[ARC140D] One to One的更多相关文章

随机推荐

  1. XYZtoZXY

    Quaternion XYZtoZXY(Vector3 p) { Vector3 v = new Vector3(p.x, -p.y, -p.z); Quaternion qx = Quaternio ...

  2. MongoDB升级

    因业务需要所以需要对mongoDB客户端jar包升级,在此记录一些过程 1.jar包替换,引入依赖 3.2.2: mongo-java-driver     |     4.6.1: mongo-dr ...

  3. JavaSE——金额转换

    package com.zhao.stringtest; import java.util.Scanner; public class Test3 { //金额转换 //查表法 public stat ...

  4. react fiber 的运行机制

    前言 1. 不同的元素类型决定不同的任务类型 2. react 的元素类型有 class component , function component ,Dom nodes, portal等等 要理解 ...

  5. 才子佳人小说研究.PDF

    书本详情 才子佳人小说研究作者:周建渝著出版社:文史哲出版社时间:1998页数:273ISBN:957549167X ISBN:9789575491673

  6. Linux下aria2详细配置,以及接管浏览器下载项

    本篇是在Deepin的环境下操作,大概可适用与Ubuntu和Debian,其他系的Linux不确定, 首先,我们安装aria2,使用命令行(在桌面右键可以打开)输入sudo apt install a ...

  7. 语法——包、权限修饰符、final

    一.包 1.什么是包? 包是用来分门别类的管理各种不同的类的,类似于文件夹,建包有利于程序的管理和维护. 建包的语法格式: package 公司域名倒写.技术名称.包名建议全部英文小写,且具备意义. ...

  8. MyBatis_10(分页插件)

    主题:分页插件 --> 针对:查询功能 一.分页插件使用步骤: 1-添加依赖 <!-- https://mvnrepository.com/artifact/com.github.page ...

  9. 实验1task5

    <实验结论> #include <stdio.h> #include <stdlib.h> int main() { float a,b,c; printf(&qu ...

  10. centos7上搭建Jenkins环境

    选择在centos 上安装jdk和tomcat来搭建Jenkins 1.jdk安装 查看有没有java环境:rpm -qa | grep java 如果没有java环境的话,接着就去查找java-1. ...