最近突然有很多人来问我这些题目怎么做OwO

然而并不是我出的,结论我也不是很懂

研究了一下觉得非常的一颗赛艇,于是就打算写这样一篇题解

DAG 1

我们考虑DAG的性质,枚举出度为0的点

设出度为0的点有k个,则一共有C(n,k)种方案

对于剩下的(n-k)个点和这k个点之间可以任意连边,方案为2^(k*(n-k))

去掉这k个点之后剩下(n-k)个点仍然是DAG,方案为f(n-k)

则方案数为C(n,k)*2^(k*(n-k))*f(n-k)

考虑到剩下的(n-k)个点中也可能有出度为0的点,即方案可能会有重复

考虑算重的部分,用容斥原理解决即可

最后得到f(n)=sigma((-1)^(k-1)*C(n,k)*2^(k*(n-k))*f(n-k))

这个递推式是O(n^2)的,可以通过DAG 1

DAG 2

不难想到要用FFT来优化上面的递推式

瓶颈在于2^(k*(n-k))的拆分

我们发现(n-k)^2=n^2+2nk+k^2

不难构造出k*(n-k)= n^2/2 - k^2/2 - (n-k)^2/2

代入之后得到卷积形式,直接做CDQ+FFT即可

定义g(n)=2^(n^2/2)*n!

注意到f(n)/g(n)=sigma( (-1)^(k-1)/g(k) * f(n-k)/g(n-k) )

定义多项式h,h(n)=(-1)^(n-1)/g(n)

定义多项式ans,ans(n)=f(n)/g(n)

变形之后得ans-ans*h=1

之后得到ans=1/(1-h)

多项式求逆即可

UPD:注意一下这里的实现,由于n^2/2有可能不是整数,而且(mod-1)和2不是互素的

但是因为在模意义下我们可以找到x^2=2(mod 998244353)

所以2^(n^2/2)=x^(n^2)

至于怎么求解x,因为可以预处理,所以直接枚举算出结果在代码里直接用就可以了

正常向的做法是用原根取对数之后BSGS搞一搞

DAG 3

设f(n)为n个点的DAG的个数(可以不连通)

设g(n)为n个点的连通DAG的个数

不难想到用f(n)减去不连通的就是连通的

计算不连通图常见技巧是枚举特定的某个点所在的联通块的大小

则得到g(n)=f(n)-sigma( C(n-1,k-1)*g(k)*f(n-k) )

这样我们就在O(n^2)的时间内求出来了

DAG 4

注意到上面的那个式子自然就是卷积形式

一发CDQ+FFT就可以了

但是我们可以做到更好

变形之后得到sigma( g(k)/(k-1)! *f(n-k)/(n-k)! ) = f(n)/(n-1)!

我们要求g,那么多项式求逆即可

我们注意到实际上不连通的DAG是由多个连通的DAG组成的

设可以不连通的DAG的多项式为f,连通DAG的多项式为g

不难得到f=e^g

那么g=ln(f)

多项式求ln即可

cojs DAG计数问题1-4 题解报告的更多相关文章

  1. cojs QAQ的图论题 题解报告

    话说这个题目应该叫做 斯特林数的逆袭 QAQ 先说一说部分分的算法 1.n<=5 直接暴力搜索就可以了 2.k=0的时候不难发现任意一张图的价值都是n,问题转化为计算有多少种图,显然是2^C(n ...

  2. cojs 简单的01串 题解报告

    题意显然是求n位二进制串中不大于其逆序串,取反串,逆序取反串的所有串按字典序排序后的第k个 由于n很小,k很大所以我们可以考虑逐位确定 问题转化为了求方案数,这显然是可以用数位DP做的 设f[len] ...

  3. cojs 简单的数位DP 题解报告

    首先这道题真的是个数位DP 我们考虑所有的限制: 首先第六个限制和第二个限制是重复的,保留第二个限制即可 第五个限制在转移中可以判断,不用放在状态里 对于第一个限制,我们可以增加一维表示余数即可 对于 ...

  4. cojs 二分图计数问题1-3 题解报告

    OwO 良心的FFT练手题,包含了所有的多项式基本运算呢 其中一部分解法参考了myy的uoj的blog 二分图计数 1: 实际是求所有图的二分图染色方案和 我们不妨枚举这个图中有多少个黑点 在n个点中 ...

  5. cojs 强连通图计数1-2 题解报告

    OwO 题目含义都是一样的,只是数据范围扩大了 对于n<=7的问题,我们直接暴力搜索就可以了 对于n<=1000的问题,我们不难联想到<主旋律>这一道题 没错,只需要把方程改一 ...

  6. 2015浙江财经大学ACM有奖周赛(一) 题解报告

    2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...

  7. 题解报告:hdu 1398 Square Coins(母函数或dp)

    Problem Description People in Silverland use square coins. Not only they have square shapes but also ...

  8. 题解报告:hdu 2069 Coin Change(暴力orDP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2069 Problem Description Suppose there are 5 types of ...

  9. 题解报告:hdu 1028 Ignatius and the Princess III(母函数or计数DP)

    Problem Description "Well, it seems the first problem is too easy. I will let you know how fool ...

随机推荐

  1. 每日定时收集MySQL日志并发送邮件

    本次脚本系统版本 MySQL日常运行产生的慢查询日志收集并且发送邮件 vim mysql-slow-log.sh # 这是一个收集慢查询的脚本,每天收集MySQL慢查询日志并且发送邮件#!/bin/b ...

  2. POJ 1986 - Distance Queries - [LCA模板题][Tarjan-LCA算法]

    题目链接:http://poj.org/problem?id=1986 Description Farmer John's cows refused to run in his marathon si ...

  3. hdfs启用垃圾站功能

    在core-site.xml文件中添加如下内容: ##开启回收站功能,设置保存7天删除数据信息        <property>                <name>f ...

  4. Python爬虫实例(六)多进程下载金庸网小说

    目标任务:使用多进程下载金庸网各个版本(旧版.修订版.新修版)的小说 代码如下: # -*- coding: utf-8 -*- import requests from lxml import et ...

  5. mySql的普通索引和复合索引

    有关普通索引和组合索引问题: 索引分单列索引和组合索引:单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引:组合索引,即一个索包含多个列.   MySQL索引类型包括:   ...

  6. python 经验:把全局变量放在一个类中

    注:红色是我增加的注释 add by zhj:其实python中的import, from-import语句是创建新的同名变量指向引入的模块和模块属性,这也就解释了下面的情况. 我们应尽量不用全局变量 ...

  7. Socket通信的Python实现

    Python中实现socket通信,socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块实现,而服务 端用有很多模块可以使用.下面就说一下服务端可使用的模块. 模 ...

  8. property:get、set

    property属性:自动调用get.set方法 每次调用隐藏的数据,都用get和set方法写的字符太长,就用property解决. 方法一:使用property()函数升级get.set方法   源 ...

  9. [py]django第三方分页器django-pure-pagination实战

    第三方分页模块: django-pure-pagination 是基于django的pagination做的一款更好用的分页器 参考 配置django-pure-pagination模块 安装 pip ...

  10. Ghost硬盘对拷

    Ghost硬盘对拷 优点:全盘完全100%对拷,包括原有操作系统也可使用.新硬盘对拷结束后,可直接插上电脑使用.消耗时间最短. 困难:对于第一次操作Ghost对拷的新人来说,需要严格对照图片步骤教程. ...