《四重计树法》

  1. 有标号无根

prufer 序列,\(n^{n-2}\)。

  1. 有标号有根

prufer 序列,\(n^{n-1}\)。

  1. 无标号有根

设 \(f[n]\) 为 \(n\) 个节点时的答案,有:

\[f[n]=\sum_{k=1}^n\frac{[\sum_{i=1}^ks_i=n-1]\prod_{i=1}^kf[s_i]}{k!}
\]

人话就是 \(F(x)=x\times Euler(F(x))\)。

考虑求导列出 ODE 然后 \(O(n^2)\)。

\[F(x)=x\exp(\sum_{i=0}\frac{F(x^i)}{i})
\]

求导:

\[F'(x)=Euler(F(x))+x(Euler(F(x))(\sum_{i=1}\frac{F(x^i)}{i}{\rm d}x))
\]
\[F'(x)=Euler(F(x))+x(Euler(F(x))(\sum_{i=1}\frac{ix^{i-1}F'(x^i)}{i}))
\]
\[F'(x)=\frac{F(x)}{x}+F(x)(\sum_{i=1}x^{i-1}F(x^i))
\]
\[xF'(x)=F(x)+xF(x)(\sum_{i=1}x^{i-1}F(x^i))
\]
\[F(x)=x(F'(x)-F(x)(\sum_{i=1}x^{i-1}F(x^i)))
\]
\[F(x)=xF'(x)-F(x)(\sum_{i=1}x^iF(x^i))
\]

同理,只需要维护出 \(F(x)\) 就可以维护出 \(F'(x),\sum_{i=1}x^iF(x^i)\) 和后面那个卷积,复杂度 \(O(n^2)\)。

  1. 无标号无根

考虑把每颗无根树变成 以重心为根的有根树

然后我们只需要做一遍有根的再减去不为重心的即可。

不为重心,那么一定有一个子树的大小大于了 \(\lfloor\frac{n}{2}\rfloor\)。

当 \(n\) 为奇数时,每棵树只有一个重心,减去的方案数为:

\[\sum_{i=\lfloor\frac{n}{2}\rfloor+1}^{n-1}f_i\times f_{n-i}
\]

当 \(n\) 为偶数时,有些树可能有两个重心。因此还需要额外减去有两个重心的树。

有两个重心就说明有一个分界的边,两边都恰好有 \(\frac{n}{2}\) 个节点。从 \(f_{\frac{n}{2}}\) 中选出两个方案即可。也就是 \(\binom{f_{\frac{n}{2}}}{2}\)。

#include<cstdio>
const int M=1005;
inline void swap(int&a,int&b){
int c=a;a=b;b=c;
}
inline int pow(int a,int b,const int&mod){
int ans(1);for(;b;b>>=1,a=1ll*a*a%mod)if(b&1)ans=1ll*ans*a%mod;return ans;
}
inline int Solve1(const int&n,const int&mod){
static int f[M],g[M],inv[M];
int ans(0);
f[1]=g[1]=inv[1]=1;
for(int i=2;i<=n;++i)inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for(int i=2;i<=n;++i){
for(int k=1;k<=i;++k)f[i]=(f[i]+1ll*f[k]*g[i-k])%mod;
f[i]=1ll*f[i]*inv[i-1]%mod;
for(int k=1;k<=i;++k)if(!(i%k))g[i]=(g[i]+1ll*f[k]*k)%mod;
}
ans=f[n];
for(int i=0;i<=n;++i)f[i]=g[i]=inv[i]=0;
return ans;
}
inline int Solve2(const int&n,const int&mod){
static int f[M],g[M],inv[M];
int ans(0);
f[1]=g[1]=inv[1]=1;
for(int i=2;i<=n;++i)inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for(int i=2;i<=n;++i){
for(int k=1;k<=i;++k)f[i]=(f[i]+1ll*f[k]*g[i-k])%mod;
f[i]=1ll*f[i]*inv[i-1]%mod;
for(int k=1;k<=i;++k)if(!(i%k))g[i]=(g[i]+1ll*f[k]*k)%mod;
}
ans=f[n];
for(int i=n/2+1;i<n;++i)ans=(ans-1ll*f[i]*f[n-i])%mod;
if(!(n%2))ans=(ans-1ll*f[n/2]*(f[n/2]-1)/2%mod)%mod;
for(int i=0;i<=n;++i)f[i]=g[i]=inv[i]=0;
return(ans+mod)%mod;
}
signed main(){
int t,n,mod;
while(~scanf("%u%u%u",&t,&n,&mod)){
if(t==1){
printf("%u\n",n==1?1:pow(n%mod,(n-2)%(mod-1),mod));
}
if(t==2){
printf("%u\n",n==1?1:pow(n%mod,(n-1)%(mod-1),mod));
}
if(t==3){
printf("%u\n",Solve1(n,mod));
}
if(t==4){
printf("%u\n",Solve2(n,mod));
}
}
}

SP1480题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. php截取字符串,避免乱码

    转载请注明来源:https://www.cnblogs.com/hookjc/ 1. 截取GB2312中文字符串 <?php//截取中文字符串 function mysubstr($str, $ ...

  2. linux 进程信号

    转载请注明来源:https://www.cnblogs.com/hookjc/ signal 函数的使用方法简单,但并不属于 POSIX 标准,在各类 UNIX 平台上的实现不尽相同,因此其用途受 到 ...

  3. kali切换桌面环境

    感谢大佬:https://blog.csdn.net/tao546377318/article/details/52353018 kali 是基于Debian的发行版,兼容性和软件支持都很好,默认使用 ...

  4. k8s实战之部署Prometheus+Grafana可视化监控告警平台

    写在前面 之前部署web网站的时候,架构图中有一环节是监控部分,并且搭建一套有效的监控平台对于运维来说非常之重要,只有这样才能更有效率的保证我们的服务器和服务的稳定运行,常见的开源监控软件有好几种,如 ...

  5. Java线程--CompletionService使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11871911.html Java线程--CompletionService使用 public ...

  6. Lvs+Keepalived+MySQL Cluster架设高可用负载均衡Mysql集群

    ------------------------------------- 一.前言 二.MySQL Cluster基本概念 三.环境 四.配置 1.LB-Master及LB-Backup配置 2.M ...

  7. Ubuntu 16.04 更改系统语言为简体中文 #####避坑指南

    大家跟着我的步骤一步一步来,肯定不会出现问题的 我这里说明两点,一是切换到管理员用户,二是更新网络源! 且待大家走一遍安装流程 一.安装时报错 原因:以访客的身份进入的会报错,改为管理员进入即可. p ...

  8. python-利用pymysql获取数据简单使用总结

    python-利用pymysql获取数据库中的数据 1.前言 pymysql是一个第三方的模块,使用前需要安装 2.安装 pip install pymysql 3.基本使用 import pymys ...

  9. 深入剖析CVE-2021-40444-Cabless利用链

    背景 CVE-2021-40444为微软MHTML远程命令执行漏洞,攻击者可通过传播Microsoft Office文档,诱导目标点击文档从而在目标机器上执行任意代码.该漏洞最初的利用思路是使用下载c ...

  10. 更快的网络文件系統 — Oxfs

    什麽时候需要网络文件系统 ? 做嵌入式的同学经常会使用 NFS 将 host 上的某个目录挂载到开发板上,方便 host 上编译构建后能直接在板子上运行,减少手工拷贝操作.网站开发时,在 host 上 ...