bzoj#3456. 城市规划

bzoj#3456. 城市规划

题目描述

Solution

用组合意义推很简单。

iii个点的简单无向图个数为2(i2)2^{\tbinom{i}{2}}2(2i)个。
则其EGFEGFEGF
G(x)=∑i>=02(n2)i!xiG(x)=\sum_{i>=0}\frac{2^{\tbinom{n}{2}}}{i!}x^i G(x)=i>=0i!2(2n)xi
iii个点的简单无向连通图个数为fif_ifi,则其EGFEGFEGF为:
F(x)=∑i>=0fii!xiF(x)=\sum_{i>=0}\frac{f_i}{i!}x^i F(x)=i>=0i!fixi
考虑它的含义,简单无向图就相当于若干个简单无向连通图拼接起来,因此G(x)=1+F(x)1!+F(x)22!+...G(x)=1+\frac{F(x)}{1!}+\frac{F(x)^2}{2!}+...G(x)=1+1!F(x)+2!F(x)2+...

因此G(x)=eF(x)G(x)=e^{F(x)}G(x)=eF(x)F(x)=ln⁡G(x)F(x)=\ln G(x)F(x)=lnG(x)

因此时间复杂度为O(nlgn)O(nlgn)O(nlgn)

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <cassert>
#include <string.h>
//#include <unordered_set>
//#include <unordered_map>
//#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B)
#define PB(A) push_back(A)
#define SIZE(A) ((int)A.size())
#define LEN(A) ((int)A.length())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define fi first
#define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; }
template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll;
typedef unsigned long long ull;
typedef long double lod;
typedef pair<int,int> PR;
typedef vector<int> VI;const lod eps=1e-11;
const lod pi=acos(-1);
const int oo=1<<30;
const ll loo=1ll<<62;
const int mods=1004535809;
const int inv2=(mods+1)>>1;
const int G=3;
const int Gi=(mods+1)/G;
const int MAXN=600005;
const int INF=0x3f3f3f3f;//1061109567
/*--------------------------------------------------------------------*/
inline int read()
{int f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f;
}
int a[MAXN],F[MAXN];
namespace Poly
{int c[MAXN],f[MAXN],b[MAXN],d[MAXN],rev[MAXN],Limit,l;inline int upd(int x,int y){ return x+y>=mods?x+y-mods:x+y; }inline int quick_pow(int x,int y){int ret=1;for (;y;y>>=1){if (y&1) ret=1ll*ret*x%mods;x=1ll*x*x%mods;}return ret;}void Number_Theoretic_Transform(int *A,int n,int opt){for (int i=0;i<Limit;i++) if (i<rev[i]) swap(A[i],A[rev[i]]);for (int mid=1;mid<Limit;mid<<=1){int Wn=quick_pow((opt==1)?G:Gi,(mods-1)/(mid<<1));for (int j=0;j<Limit;j+=mid<<1)for (int k=j,w=1;k<j+mid;k++,w=1ll*w*Wn%mods){int x=A[k],y=1ll*A[k+mid]*w%mods;A[k]=upd(x,y),A[k+mid]=upd(x,mods-y);}}if (opt==-1){int invLimit=quick_pow(Limit,mods-2);for (int i=0;i<n;i++) A[i]=1ll*A[i]*invLimit%mods;for (int i=n;i<Limit;i++) A[i]=0;}}void getinv(int *F,int *G,int n) //F->invG {if (n==1) { F[0]=quick_pow(G[0],mods-2); return; }getinv(F,G,(n+1)>>1);Limit=1,l=0;while (Limit<(n<<1)) Limit<<=1,l++;for (int i=0;i<Limit;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<(l-1));for (int i=0;i<n;i++) c[i]=G[i];for (int i=n;i<Limit;i++) c[i]=0;Number_Theoretic_Transform(c,n,1);Number_Theoretic_Transform(F,n,1);for (int i=0;i<Limit;i++) F[i]=1ll*upd(2,mods-1ll*F[i]*c[i]%mods)*F[i]%mods;Number_Theoretic_Transform(F,n,-1);for (int i=n;i<Limit;i++) F[i]=0;}void getln(int *a,int n) //a->ln a (a[0]=1){memset(f,0,sizeof f);getinv(f,a,n);for (int i=0;i<n;i++) a[i]=1ll*a[i+1]*(i+1)%mods;Limit=1,l=0;while (Limit<(n<<1)) Limit<<=1,l++;for (int i=0;i<Limit;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<(l-1));Number_Theoretic_Transform(a,n,1);Number_Theoretic_Transform(f,n,1);for (int i=0;i<Limit;i++) f[i]=1ll*f[i]*a[i]%mods;Number_Theoretic_Transform(f,n,-1);for (int i=1;i<n;i++) a[i]=1ll*f[i-1]*quick_pow(i,mods-2)%mods; for (int i=n;i<=Limit;i++) a[i]=0; a[0]=0;}void getexp(int *F,int *a,int n) //F->exp a (a[0]=0){memset(b,0,sizeof b);if (n==1) { F[0]=1; return; }getexp(F,a,(n+1)>>1);for (int i=0;i<n;i++) b[i]=F[i];getln(b,n);Limit=1,l=0;while (Limit<(n<<1)) Limit<<=1,l++;for (int i=0;i<Limit;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<(l-1));for (int i=0;i<n;i++) b[i]=upd(a[i],mods-b[i]);for (int i=n;i<Limit;i++) b[i]=F[i]=0;b[0]++;Number_Theoretic_Transform(F,n,1);Number_Theoretic_Transform(b,n,1);for (int i=0;i<Limit;i++) F[i]=1ll*F[i]*b[i]%mods;Number_Theoretic_Transform(F,n,-1);for (int i=n;i<Limit;i++) F[i]=0; }void getsqrt(int *F,int *a,int n,int k) //F->sqrt^k a(a[0]=1){memset(d,0,sizeof d);for (int i=0;i<n;i++) d[i]=a[i];getln(d,n);int invk=quick_pow(k,mods-2);for (int i=0;i<n;i++) d[i]=1ll*d[i]*invk%mods;getexp(F,d,n);} 	void getpow(int *F,int *a,int n,int k) //F->pow^k a(a[0]=1){memset(d,0,sizeof d);for (int i=0;i<n;i++) d[i]=a[i];getln(d,n);for (int i=0;i<n;i++) d[i]=1ll*d[i]*k%mods;getexp(F,d,n);}
}
int fac[MAXN],inv[MAXN];
void Init(int n)
{fac[0]=1;for (int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%mods;inv[n]=Poly::quick_pow(fac[n],mods-2);for (int i=n-1;i>=0;i--) inv[i]=1ll*inv[i+1]*(i+1)%mods;
}
int main()
{int n=read();Init(n+5);for (int i=0;i<=n;i++) a[i]=1ll*Poly::quick_pow(2,1ll*i*(i-1)/2%(mods-1))*inv[i]%mods;
//	for (int i=0;i<=n;i++) cout<<i<<":"<<a[i]<<endl;Poly::getln(a,n+1);
//	for (int i=0;i<=n;i++) cout<<i<<":"<<a[i]<<endl;printf("%d\n",1ll*a[n]*fac[n]%mods);return 0;
}

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

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

相关文章

iNeuOS云操作系统,.NET Core全系打造

一.演示地址演示地址&#xff1a; 进入iNeuOS系统。&#xff08;建议使用chrome浏览器&#xff09;http://192.144.173.38:8081/login.html测试名称&#xff1a;admin测试密码&#xff1a;admin下载《iNeuOS云操作系统演示应用手册》 链接&#xff1a;https://pan.baidu.co…

译 | 你到底有多精通 C# ?

点击上方蓝字关注“汪宇杰博客”文&#xff1a;Damir Arh译&#xff1a;Edi Wang即使是具有良好 C# 技能的开发人员有时候也会编写可能会出现意外行为的代码。本文介绍了属于该类别的几个 C# 代码片段&#xff0c;并解释了令人惊讶的行为背后的原因。Null 值我们都知道&#xf…

uoj#422. 【集训队作业2018】小Z的礼物

uoj#422. 【集训队作业2018】小Z的礼物 题目描述 Solution 所有礼物全部取到的方案数并不好求&#xff0c;因此我们考虑min−maxmin-maxmin−max容斥&#xff0c;转化为第一次取到集合中某一个的期望时间。 令pn∗(m−1)m∗(n−1)pn*(m-1)m*(n-1)pn∗(m−1)m∗(n−1)表示有…

[开源] FreeSql AOP 功能模块 - FreeSql

FreeSql 是一个功能强大的 .NETStandard 库&#xff0c;用于对象关系映射程序(O/RM)&#xff0c;支持 .NETCore 2.1 或 .NETFramework 4.6.1&#xff08;QQ群&#xff1a;4336577&#xff09;。据了解&#xff0c;用户使用很少问问题&#xff0c;编码过程中&#xff0c;因业务阻…

Atcoder ARC062F - AtCoDeerくんとグラフ色塗り / Painting Graphs with AtCoDeer

Atcoder ARC062F - AtCoDeerくんとグラフ色塗り / Painting Graphs with AtCoDeer 题目描述 简要题意&#xff1a;给定一个有标号的无向图&#xff0c;你可以给每条边染上KKK种颜色之一&#xff0c;求本质不同的图的染色方案&#xff08;两个图本质不同定义为不能通过若干次环…

各大主流K8S服务全方位能力比对

大家好&#xff0c;趁打开流量主的东风&#xff0c;特此贡献一篇长文&#xff0c;分析一下目前国内国外几大著名云厂商的kubernetes服务&#xff0c;以飨诸君。文起之前&#xff0c;先聊态度。 我本人是十分看好k8s的发展的&#xff0c;为何&#xff1f; 理因古往今来&#xff…

CF868F Yet Another Minimization Problem

CF868F Yet Another Minimization Problem 题目描述 Solution 一开始可以很容易地写出一个dpdpdp式子&#xff1a; 设fi,jf_{i,j}fi,j​表示前iii个数分成jjj段的最小代价&#xff0c;有&#xff1a; fi,jmin⁡k1i−1fk,j−1Ck1,if_{i,j}\min_{k1}^{i-1}f_{k,j-1}C_{k1,i} f…

.NET Core 的Generic Host 之Generic Host Builder

通用Host(Generic Host) 与 web Host 不同的地方就是通用Host解耦了Http请求管道&#xff0c;使得通用Host拥有更广的应用场景。比如&#xff1a;消息收发、后台任务以及其他非http的工作负载。这些场景都可以通过使用通用Host拥有横切&#xff08;Cross-cutting&#xff09;的…

loj#2143. 「SHOI2017」组合数问题

loj#2143. 「SHOI2017」组合数问题 题目描述 Solution 考虑转化一下我们要求的东西。 ∑i0n(nkikr)∑i0n(nki)[i≡r(modk)]\sum_{i0}^{n}\binom{nk}{ikr}\sum_{i0}^{n}\binom{nk}{i}[i \equiv r \;\;(mod\;\;k)]∑i0n​(ikrnk​)∑i0n​(ink​)[i≡r(modk)] 这个式子是什么…

.NET Core微服务 权限系统+工作流(二)工作流系统

一、前言接上一篇 .NET Core微服务 权限系统工作流&#xff08;一&#xff09;权限系统 &#xff0c;再来一发工作流&#xff0c;我在接触这块开发的时候一直好奇它的实现方式&#xff0c;翻看各种工作流引擎代码&#xff0c;探究其实现方式&#xff0c;个人总结出来一个核心要…

LuoguP5504 [JSOI2011]柠檬

LuoguP5504 [JSOI2011]柠檬 题目描述 Solution 容易发现一个性质&#xff1a;每一段划分区间的首尾两个元素相同。 因为倘若不相同的话其中至少一个元素也就不产生贡献&#xff0c;将其划分在其他区间一定不会变劣。 因此就可以写出一个简单的O(n2)O(n^2)O(n2)的dpdpdp。 f…

开源分布式Job系统,调度与业务分离-如何创建一个计划HttpJob任务

项目介绍&#xff1a;Hangfire&#xff1a;是一个开源的job调度系统,支持分布式JOB&#xff01;&#xff01;Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的。可以独立更新Hangfire版本不影响&#xff01;该组件已被Hangfire官方采纳&#xff…

LuoguP5366 [SNOI2017]遗失的答案

LuoguP5366 [SNOI2017]遗失的答案 题目描述 Solution 可以先简化问题&#xff0c;特判LLL不是GGG倍数的情况。 然后令n⌊nG⌋n\lfloor \frac{n}{G} \rfloorn⌊Gn​⌋,L⌊LG⌋L\lfloor \frac{L}{G} \rfloorL⌊GL​⌋。 现在相当于求出1...n1...n1...n中选择若干数&#xff0c…

Angular 8正式发布!

Angular 团队今天宣布推出 Angular 8 正式版。作为一个期待已久的重大版本更新&#xff0c;Angular 8 为框架、Angular Material 和命令行界面工具 Angular CLI 带来了大量的改进和新功能。团队表示 Angular 8 显著减少了在现代浏览器中应用程序的启动时间、提供了用于定制 CLI…

[JLOI2016]成绩比较

[JLOI2016]成绩比较 题目描述 Solution 考虑dpdpdp。 令fi,jf_{i,j}fi,j​表示前iii个科目中有jjj个人被碾压的方案数。 转移显然为&#xff1a; fi,j∑k≥jfi−1,k∗(kj)∗(n−k−1Ri−(k−j)−1)∗(∑t1Uitn−Ri(Ui−t)Ri−1)f_{i,j}\sum_{k\geq j}f_{i-1,k}*\binom{k}{j}…

.NET Core 3.0 webapi集成Swagger 5.0

在项目中引用Swashbuckle.AspNetCore和Swashbuckle.AspNetCore.Filters两个dll&#xff0c;在Startup中的ConfigureServices相关配置代码如下 两个重点&#xff1a;1、options.DocumentFilter<HiddenApiFilter>();定义那些接口方法被隐藏2、启用oauth2安全授权访问…

CF848C Goodbye Souvenir

CF848C Goodbye Souvenir 题目描述 Solution 考虑拆贡献&#xff0c;把最后一次的下标减去第一次的下标的和拆成每一个点与和它数字相同的上一个点的差的和&#xff0c;也就是∑i−pre[i]\sum i-pre[i]∑i−pre[i]。 这样转化之后&#xff0c;每一次询问一个区间[l,r][l,r]…

站点部署,IIS配置优化指南

通常把站点发布到IIS上运行正常后&#xff0c;很少会去考虑IIS提供的各种参数&#xff0c;如何配置才是最适合当前站点运行需要的&#xff1f;这篇文章&#xff0c;从基本设置、回收机制、性能、并发、安全性等IIS设置讲解应当如何优化。先来“IIS应用程序池”优化后的参数配置…

Atcoder Keyence Programming Contest 2020 D - Swap and Flip

Atcoder Keyence Programming Contest 2020 D - Swap and Flip 题目描述 Solution 写了一个简单的O(2nn(nw))O(2^nn(nw))O(2nn(nw))的状压DP做法&#xff0c;正解似乎是O(2nn2)O(2^nn^2)O(2nn2)的&#xff0c;但也能过。 设我们的方案是At1,At2,...,AtnA_{t_1},A_{t_2},...,…

张高兴的.NET Core IoT 入门指南:(四)使用 SPI 进行通信

什么是 SPI和上一篇文章的 I2C 总线一样&#xff0c;SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;也是设备与设备间通信方式的一种。SPI 是一种全双工&#xff08;数据可以两个方向同时传输&#xff09;的串行通信总线&#xff0c;由摩托罗…