博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 3456: 城市规划 [多项式求逆元 DP]
阅读量:7287 次
发布时间:2019-06-30

本文共 1701 字,大约阅读时间需要 5 分钟。

题意:

求出n个点的简单(无重边无自环)无向连通图数目.

方案数mod 1004535809(479 * 2 ^ 21 + 1)即可.

n<=130000

 


DP求方案

g(n) n个点所有图的方案数 显然2C(n,2)=2n(n-1)

f(n) n个点连通图的方案数 

然后枚举第一个点所在连通块的点数 

g(n)=∑i=1..n-1{C(n-1,i-1)*f(i)*g(n-i)}

代入g(n) 两边同除(n-1)!消掉那个组合数上面那块,就变成了卷积的形式

我不写了直接看Miskcoo的公式啦 

 

然后C(x)=A(x)*B(x)

A(x)=C(x)*B(x)-1

放在mod (x>n) 意义下求逆元就行了 因为需要的是a[n]


 

多项式求逆元

去看Miskcoo的教程吧 http://blog.miskcoo.com/2015/05/polynomial-inverse

简单的思路就是知道A(x) mod (x[n/2]) 下的逆元求mod (xn) 下的逆元

方法就是两个同余的式子写出来一减,两边平方再同乘A(x) 再移项

说一点关于意义的理解吧:

A(x)=Q(x)B(x)+R(x) degR<degB

A(x)Ξ0 (mod xn) 就是说A(x)的0..n-1项系数都是0

A(x)B(x)Ξ1 (mod xn) 它们每一项都有xn,否则不可能余数只有1;所以也有xn/2;

 

注意:

1.最后要乘(n-1)! 不要乘(n-1)

2.多项式求逆元每次长度都不确定,不能先预处理二进制反转

 

#include 
#include
#include
#include
#include
using namespace std;typedef long long ll;const int N=3e5+5;inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){
if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;}int P=1004535809,MOD=P;ll Pow(ll a,ll b,ll MOD){ ll ans=1; for(;b;b>>=1,a=a*a%MOD) if(b&1) ans=ans*a%MOD; return ans;}struct NTT{ int n,rev[N]; ll g; void ini(int m){ n=1; while(n
>1; ll wn=Pow(g,flag==1?(P-1)/l:P-1-(P-1)/l,P); for(int *p=a;p!=a+n;p+=l){ ll w=1; for(int k=0;k
>1,a,b); int n=1; while(n< deg<<1) n<<=1; copy(a,a+deg,c); fill(c+deg,c+n,0); transform(c,1,n); transform(b,1,n); for(int i=0;i
>1%(P-1),P); for(int i=0;i<=n;i++) B[i]=(ll)poc[i]*invFac[i]%P; for(int i=1;i<=n;i++) C[i]=(ll)poc[i]*invFac[i-1]%P;//printf("CC %d\n",C[i]); fft.polyInv(fft.n,B,A); fft.n<<=1; fft.transform(A,1,fft.n); fft.transform(C,1,fft.n); for(int i=0;i

 

转载地址:http://gmdjm.baihongyu.com/

你可能感兴趣的文章
java 读取 Properties
查看>>
dubbo-admin密码更改
查看>>
StringBuilder.append长string时出问题。
查看>>
【C语言学习】国嵌18__#error和#line
查看>>
FreeBSD 日记 - 硬件信息显示
查看>>
UDP套接口编程
查看>>
static_cast const_cast reindivter_cast dynamic_cast
查看>>
《CLR Via C#》改变Visual Studio中Output Window输出内容的详细程度
查看>>
php基础学习-- strstr() 函数
查看>>
Java日期格式中的DD和dd的差别
查看>>
c语言加动态库linux
查看>>
Ubuntu下配置SVN
查看>>
android 基本工具类方法及%s妙用
查看>>
dzzoffice的树型结构用户管理设计
查看>>
常见排序算法及其复杂度分析
查看>>
签到活动设计 继承原有的用户系统
查看>>
Android WebView小结
查看>>
HTTP请求报文详解
查看>>
android TimerTask 的简单应用
查看>>
過濾非數字字符的正則表達式以及返回光標
查看>>