P4841,jzoj3303-城市规划【NTT,多项式求逆,dp】

正题

题目链接:https://www.luogu.org/problemnew/show/P4841


题目大意

nnn个点的简单联通无向图的个数。


解题思路

首先考虑n2n^2n2,我们设gig_igi表示iii个点的简单无向图的个数,显然gi=2n(n−1)2g_i=2^{\frac{n(n-1)}{2}}gi=22n(n1)

然后我们设fif_ifi表示iii个点的简单无向联通图的个数,然后我们只要固定一个联通块大小为k(k<i)k(k<i)k(k<i)然后剩下的点都不与其联通就可以去掉不连通的。

也就是fn=gn−∑i=1n−1fi∗Cn−1i−1∗gn−if_n=g_n-\sum_{i=1}^{n-1}f_i*C_{n-1}^{i-1}*g_{n-i}fn=gni=1n1fiCn1i1gni

这就是O(n2)O(n^2)O(n2)

之后我们考虑优化,将CCC拆开
fn=gn−∑i=1n−1fi∗(i−1)!(n−i)!(i−1)!∗gn−if_n=g_n-\sum_{i=1}^{n-1}f_i*\frac{(i-1)!}{(n-i)!(i-1)!}*g_{n-i}fn=gni=1n1fi(ni)!(i1)!(i1)!gni
然后将nnn的项提出
fn=gn−∑i=1n−1fi∗(n−1)!(n−i)!(i−1)!∗gn−if_n=g_n-\sum_{i=1}^{n-1}f_i*\frac{(n-1)!}{(n-i)!(i-1)!}*g_{n-i}fn=gni=1n1fi(ni)!(i1)!(n1)!gni
gn(n−1)!=∑i=1nfi(i−1)!gn−i(n−i)!\frac{g_n}{(n-1)!}=\sum_{i=1}^n\frac{f_i}{(i-1)!}\frac{g_{n-i}}{(n-i)!}(n1)!gn=i=1n(i1)!fi(ni)!gni
然后使用NTTNTTNTT卷起来
F(x)=∑i=1+∞fi(i−1)!xiF(x)=\sum_{i=1}^{+\infty}\frac{f_i}{(i-1)!}x^iF(x)=i=1+(i1)!fixi
G(x)=∑i=0+∞gn−i(n−i)!xiG(x)=\sum_{i=0}^{+\infty}\frac{g_{n-i}}{(n-i)!}x^iG(x)=i=0+(ni)!gnixi
H(x)=∑n=1+∞gn(n−1)!xnH(x)=\sum_{n=1}^{+\infty}\frac{g_n}{(n-1)!}x^nH(x)=n=1+(n1)!gnxn
上两个的iii与最后一个的nnn同理,所以现在有
H(x)=F(x)G(x)H(x)=F(x)G(x)H(x)=F(x)G(x)
F(x)=H(x)G(x)−1F(x)=H(x)G(x)^{-1}F(x)=H(x)G(x)1
现在我们要求F(x)F(x)F(x)H(x)H(x)H(x)G(x)G(x)G(x)都知道。

那么我们将G(x)G(x)G(x)进行求逆后用NTTNTTNTTH(x)H(x)H(x)相乘就好了。


codecodecode

#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const ll N=131000,XJQ=1004535809;
ll n,fac[N],inv[N],r[N*4],Gi;
ll power(ll x,ll b)
{ll ans=1;while(b){if(b&1) ans=ans*x%XJQ;x=x*x%XJQ;b>>=1;}return ans;
}
struct Poly{ll x[N*4];void cpy(Poly &a,ll len){for(ll i=0;i<len;i++)x[i]=a.x[i];}void reset(ll len){for(ll i=0;i<len;i++)x[i]=0;}void ntt(ll n,ll op){for(ll i=1;i<n;i++)r[i]=(r[i>>1]>>1)|((i&1)?n>>1:0);for(ll i=0;i<n;i++)if(i<r[i])swap(x[i],x[r[i]]);for(ll p=2;p<=n;p<<=1){ll len=p>>1,tmp=power(3,(XJQ-1)/p);if(op==-1)tmp=power(tmp,XJQ-2);for(ll k=0;k<n;k+=p){ll buf=1;for(ll i=k;i<k+len;i++){ll tt=buf*x[len+i]%XJQ;x[len+i]=(x[i]-tt+XJQ)%XJQ;x[i]=(x[i]+tt)%XJQ;buf=buf*tmp%XJQ;}}}}
};
Poly get_inv(Poly &a,Poly &b,Poly &c,ll n){if(a.x[0]==1) b.x[0]=1;else b.x[0]=power(a.x[0],XJQ-2);for(ll w=1;(1<<(w-1))<n;++w){ll len=(1<<w);c.cpy(a,len);c.ntt(len*2,1);b.ntt(len*2,1);for(ll i=0;i<(len<<1);i++)b.x[i]=(2-b.x[i]*c.x[i]%XJQ+XJQ)*b.x[i]%XJQ;b.ntt(len*2,-1);ll inv=power(len*2,XJQ-2);for(ll i=0;i<len;i++)b.x[i]=b.x[i]*inv%XJQ;for(ll i=len;i<len*2;i++) b.x[i]=0;}return b;
}
Poly H,Ginv,a,b;
int main()
{scanf("%lld",&n);n++;fac[0]=fac[1]=inv[0]=inv[1]=1;for(ll i=2;i<=n;i++){inv[i]=XJQ-(XJQ/i)*inv[XJQ%i]%XJQ;fac[i]=fac[i-1]*inv[i]%XJQ;}Ginv.x[0]=1;for(ll i=1;i<n;i++){ll tmp=power(2,i*(i-1)/2%(XJQ-1));H.x[i]=tmp*fac[i-1]%XJQ,Ginv.x[i]=tmp*fac[i]%XJQ;}Ginv=get_inv(Ginv,a,b,n);ll len=1,w=0;while(len<(n<<1)) len<<=1,w++;for(ll i=n;i<len;i++) Ginv.x[i]=0;H.ntt(len,1);Ginv.ntt(len,1);for(ll i=0;i<=len;i++)H.x[i]=H.x[i]*Ginv.x[i]%XJQ;H.ntt(len,-1);printf("%lld",power(inv[2],w)*H.x[n-1]%XJQ*power(fac[n-2],XJQ-2)%XJQ);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软发布PowerShell Core第一个版本:支持多平台开发

微软旗下的PowerShell团队正式宣布推出PowerShell Core 6.0&#xff0c;非常诡异的是这明明是Core的第一个版本&#xff0c;但是却用了一个6.0后缀的版本号。“这是我们对PowerShell做出的最大最重要的改变&#xff01;”微软技术研究员兼PowerShell创始人Jeffrey Snover在Twit…

Mybatis生成器插件扩展,定制方法生成,list参数生成

Mybatis生成器插件扩展&#xff0c;定制方法生成 public Criteria andNameIsEmpty() {addCriterion("name ");setCriterionPattern();return (Criteria) this;}public Criteria andNameFindInSet(String value) {addCriterion("find_in_set($value, name)"…

欢乐纪中某A组赛【2019.7.5】

前言 被花式暴虐&#xff0c;T1T1T1签到后两题神仙 成绩 JJJ表示初中&#xff0c;HHH表示高中后面加的是几年级 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC111(J−3)ZZY(J-3)ZZY(J−3)ZZY200200200100100100100100100000888(J−3)WHF(J-3)WHF(J−3)WHF145145145…

Mybatis生成器插件扩展,生成OR操作

Mybatis生成器插件扩展&#xff0c;生成OR操作 ManExample example new ManExample();ManExample.Criteria and example.createCriteria();and.andNameIsEmpty().andNameFindInSet("a").andNameFindInSetIn(Arrays.asList("1", "2", "3&q…

.NET Core单文件发布静态编译AOT CoreRT

.NET Core单文件发布静态编译AOT CoreRT&#xff0c;将.NET Core应用打包成一个可执行文件并包含运行时。支持Windows, MacOS and Linux x64 w/ RyuJIT codegen。示例项目&#xff1a;https://github.com/dotnet/corert/tree/master/samples/WebApi下面来实际体验。首先确保安装…

2019纪中暑假游记+总结

Travels总篇\texttt{Travels总篇}Travels总篇 7/4\texttt{7/4}7/4 下午才去纪中&#xff0c;早上就一大早和同学出去玩&#xff0c;看了蜘蛛侠然后到3点多才出发。 因为走南沙大桥所以很快就到了(具体有多快忘了&#xff0c;反正路上一点都不塞车)。就愉快的去整理宿舍洗个早…

使用xUnit为.net core程序进行单元测试(上)

一. 导读为什么要编写自动化测试程序&#xff08;Automated Tests&#xff09;&#xff1f;可以频繁的进行测试可以在任何时间进行测试&#xff0c;也可以按计划定时进行&#xff0c;例如&#xff1a;可以在半夜进行自动测试。肯定比人工测试要快。可以更快速的发现错误。基本上…

select2删除选中项,allowClear设置

转载自 select2删除选中项&#xff0c;allowClear设置 在使用select2过程中&#xff0c;有时候需要删除我们选中的选项&#xff0c;如下图&#xff1a; 这时候就需要设置select2的allowClear属性了。 有两种方法&#xff1a; 第一种&#xff1a; 直接用select2定义的一个c…

jzoj2679-跨时代【背包,dfs,状压】

正题 题目大意 若干根棍子&#xff0c;不能折&#xff0c;不能多余求能够组成的最大长方形。 解题思路 首先我们发现如果棍子集合SSS长度为lll且它有子集GGG长度为l2\frac{l}{2}2l​那么就表示这个集合的棍子可以作为一个矩形的对应两边&#xff0c;这样我们只要枚举两个不相…

LeetCode算法总结-回溯法与深度优先搜索

转载自 LeetCode算法总结-回溯法与深度优先搜索 回溯法&#xff08;探索与回溯法&#xff09;是一种选优搜索法&#xff0c;又称为试探法&#xff0c;按选优条件向前搜索&#xff0c;以达到目标。但当探索到某一步时&#xff0c;发现原先选择并不优或达不到目标&#xff0c;就…

Mybatis的配置与使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、Mybatis所用jar包二、使用步骤1.配置mybatis.xml文件2.创建与数据库对应的po类&#xff0c;提供get、set、toString方法3.创建与Dept对应的接口类&#xff1…

入门干货之用DVG打造你的项目主页-Docfx、Vs、Github

由于这三项技术涉及到的要点以及内容较多&#xff0c;希望大家有空能自己挖掘一下更多更深的用法。0x01、介绍VS&#xff0c;即VS2017以及以上版本&#xff0c;宇宙最好的IDE&#xff0c;集成了宇宙最有前景的平台&#xff0c;前阶段也支持了宇宙最好的语言。Github&#xff0c…

P2579,jzoj2288-[ZJOI2005]沼泽鳄鱼【矩阵乘法】

正题 题目链接:https://www.luogu.org/problemnew/show/P2579 题目大意 一张无向图&#xff0c;一个起点一个终点。 有食人鱼&#xff0c;在若干个点之间有周期的移动&#xff0c;周期为222或333或444个点为循环。 然后要求从起点到终点走kkk步且不碰到食人鱼的方案数。 解…

ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器)

前言本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期.这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度.正文今天我们主要讲讲如何使用自带IOC容器,emm..虽然自带的功能不是那么强大,但是胜在轻量级..而且..不用引…

P4130,jzoj1214-[NOI2007]项链工厂【线段树】

正题 题目链接:https://www.luogu.org/problemnew/show/P4130 题目大意 一个环形颜色珠子链&#xff0c;位置(注意不是上面的珠子)从最上顺时针下来位置依次标号1∼n1\sim n1∼n。 然后要求支持以下操作 Rk:R\ k:R k:将所有珠子顺时针旋转kkk个。F:F:F:将所有珠子以111向下翻…

LeetCode常用算法模式大厂面试题整理

转载自 LeetCode常用算法模式&大厂面试题整理 文章目录 1、滑动窗口 2、双指针 3、快慢指针 4、合并区间 5、循环排序 6、就地反转链表 7、堆-优先队列问题 8、Top K 9、归并 10、单调栈 11、回溯法 BATJ等大厂面试真题汇总 1、滑动窗口 1 一个左指针&#xff0c;一个右…

ABPZero系列教程之拼多多卖家工具

此系列文章围绕着拼多多卖家工具来介绍ABPZero的使用&#xff0c;内容包括手机登录、手机注册、拼团提醒、微信公众号绑定帐号、有拼团发送消息到微信公众号&#xff08;只要关注过微信公众号并已绑定系统帐号&#xff09;。学习此系列必备&#xff1a;手机验证码&#xff1a;使…

欢乐纪中某A组赛【2019.7.6】

前言 斐大爷NBNBNB 成绩 JJJ表示初中&#xff0c;HHH表示高中后面加的是几年级 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC555(J−2)WYC(J-2)WYC(J−2)WYC210210210100100100100100100101010666(J−3)ZZY(J-3)ZZY(J−3)ZZY200200200100100100100100100000666(J−…

详解Vue中watch的高级用法

转载自 详解Vue中watch的高级用法 我们通过实例代码给大家分享了Vue中watch的高级用法&#xff0c;对此知识点有需要的朋友可以跟着学习下。 假设有如下代码&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <div> <p>FullName: {{fullName}}<…