日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bzoj3456: 城市规划

發布時間:2024/4/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj3456: 城市规划 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

?剛剛解決完電力網絡的問題, 阿貍又被領導的任務給難住了.
?剛才說過, 阿貍的國家有n個城市, 現在國家需要在某些城市對之間建立一些貿易路線, 使得整個國家的任意兩個城市都直接或間接的連通.?為了省錢, 每兩個城市之間最多只能有一條直接的貿易路徑. 對于兩個建立路線的方案, 如果存在一個城市對, 在兩個方案中是否建立路線不一樣, 那么這兩個方案就是不同的, 否則就是相同的. 現在你需要求出一共有多少不同的方案.
?好了, 這就是困擾阿貍的問題. 換句話說, 你需要求出n個點的簡單(無重邊無自環)無向連通圖數目.
?由于這個數字可能非常大, 你只需要輸出方案數mod 1004535809(479 * 2 ^ 21 + 1)即可.

Input

?僅一行一個整數n(<=130000)
?

Output

?僅一行一個整數, 為方案數 mod 1004535809.
?

Sample Input

3

Sample Output

4

HINT

?

?對于 100%的數據, n <= 130000

?

Source

方法一:cdq+ntt

設f[n]為n個點的答案,則

這就可以做了

code:

1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #define maxn 262148 7 #define mod 1004535809 8 #define g 3 9 using namespace std; 10 typedef long long int64; 11 char ch; 12 int n; 13 int a[maxn],b[maxn],c[maxn],Wn[2][maxn],wn,w,t1,t2; 14 int f[maxn],pow2[maxn],fac[maxn],inv_fac[maxn],inv_n[maxn]; 15 int re[19][maxn]; 16 bool ok; 17 inline void read(int &x){ 18 for (ok=0,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=1; 19 for (x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar()); 20 if (ok) x=-x; 21 } 22 inline int rev(int len,int v){ 23 int t=0; 24 for (int i=0;i<len;i++) t<<=1,t|=v&1,v>>=1; 25 return t; 26 } 27 inline int ksm(int a,int b){ 28 int64 t=1; 29 for (;b;b>>=1){if (b&1) t=1LL*t*a%mod; a=1LL*a*a%mod;} 30 return t; 31 } 32 inline int ksm(int a,int64 b){ 33 int64 t=1; 34 for (;b;b>>=1){if (b&1) t=1LL*t*a%mod; a=1LL*a*a%mod;} 35 return t; 36 } 37 inline void ntt(int *a,int n,int len,int op){ 38 for (int i=0,t=re[len][i];i<n;i++,t=re[len][i]) if (i<t) swap(a[i],a[t]); 39 for (int s=2;s<=n;s<<=1){ 40 wn=Wn[op][s]; 41 for (int i=0;i<n;i+=s){ 42 w=1; 43 for (int j=i;j<i+(s>>1);j++,w=1LL*w*wn%mod){ 44 t1=a[j],t2=1LL*w*a[j+(s>>1)]%mod; 45 a[j]=(t1+t2)%mod,a[j+(s>>1)]=(t1-t2+mod)%mod; 46 } 47 } 48 } 49 if (op==1){ 50 int x=inv_n[n]; 51 for (int i=0;i<n;i++) a[i]=1LL*a[i]*x%mod; 52 } 53 } 54 inline void solve(int l,int r){ 55 if (l==r){ 56 f[l]=(pow2[l]-(int)(1LL*fac[l-1]*f[l]%mod)+mod)%mod; 57 return; 58 } 59 int m=(l+r)>>1; 60 solve(l,m); 61 int n=1,len=0; 62 while (n<((r-l+1)<<1)) n<<=1,len++; 63 for (int i=0;i<n;i++) a[i]=0; 64 for (int i=0;i<n;i++) b[i]=0; 65 for (int i=l;i<=m;i++) a[i-l]=1LL*f[i]*inv_fac[i-1]%mod; 66 for (int i=1;i<r-l+1;i++) b[i]=1LL*pow2[i]*inv_fac[i]%mod; 67 ntt(a,n,len,0),ntt(b,n,len,0); 68 for (int i=0;i<n;i++) c[i]=1LL*a[i]*b[i]%mod; 69 ntt(c,n,len,1); 70 for (int i=m+1;i<=r;i++) f[i]=(f[i]+c[i-l])%mod; 71 solve(m+1,r); 72 } 73 void init(){ 74 read(n); 75 for (int i=1;i<=n;i++) pow2[i]=ksm(2,(1LL*i*(i-1))>>1); 76 fac[0]=1; 77 for (int i=1;i<=n;i++) fac[i]=1LL*i*fac[i-1]%mod; 78 for (int i=0;i<=n;i++) inv_fac[i]=ksm(fac[i],mod-2); 79 for (int i=2;i<(n<<2);i<<=1) Wn[0][i]=ksm(g,(mod-1)/i); 80 for (int i=2;i<(n<<2);i<<=1) Wn[1][i]=ksm(Wn[0][i],mod-2); 81 for (int i=2;i<(n<<2);i<<=1) inv_n[i]=ksm(i,mod-2); 82 for (int i=1;(1<<i)<(n<<2);i++){ 83 for (int j=0;j<(1<<i);j++) re[i][j]=rev(i,j); 84 } 85 } 86 int main(){ 87 init(),solve(1,n); 88 printf("%d\n",f[n]); 89 return 0; 90 }

方法二:多項式的逆元

http://blog.miskcoo.com/2015/05/bzoj-3456

如何求多項式的逆元http://blog.miskcoo.com/2015/05/polynomial-inverse

code:

1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #define maxn 262148 7 #define mod 1004535809 8 #define g 3 9 using namespace std; 10 typedef long long int64; 11 char ch; 12 int m,n,len,N; 13 int a[maxn],b[maxn],c[maxn],f[maxn],t[maxn],Wn[2][maxn],wn,w,t1,t2; 14 int pow2[maxn],fac[maxn],inv_fac[maxn],inv_n[maxn]; 15 int re[19][maxn]; 16 bool ok; 17 inline void read(int &x){ 18 for (ok=0,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=1; 19 for (x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar()); 20 if (ok) x=-x; 21 } 22 inline int rev(int len,int v){ 23 int t=0; 24 for (int i=0;i<len;i++) t<<=1,t|=v&1,v>>=1; 25 return t; 26 } 27 inline int ksm(int a,int b){ 28 int64 t=1; 29 for (;b;b>>=1){if (b&1) t=1LL*t*a%mod; a=1LL*a*a%mod;} 30 return t; 31 } 32 inline int ksm(int a,int64 b){ 33 int64 t=1; 34 for (;b;b>>=1){if (b&1) t=1LL*t*a%mod; a=1LL*a*a%mod;} 35 return t; 36 } 37 inline void ntt(int *a,int n,int len,int op){ 38 for (int i=0,t=re[len][i];i<n;i++,t=re[len][i]) if (i<t) swap(a[i],a[t]); 39 for (int s=2;s<=n;s<<=1){ 40 wn=Wn[op][s]; 41 for (int i=0;i<n;i+=s){ 42 w=1; 43 for (int j=i;j<i+(s>>1);j++,w=1LL*w*wn%mod){ 44 t1=a[j],t2=1LL*w*a[j+(s>>1)]%mod; 45 a[j]=(t1+t2)%mod,a[j+(s>>1)]=(t1-t2+mod)%mod; 46 } 47 } 48 } 49 if (op==1){ 50 int x=inv_n[n]; 51 for (int i=0;i<n;i++) a[i]=1LL*a[i]*x%mod; 52 } 53 } 54 void init(){ 55 read(m),n=m+1,N=1; 56 while (N<(n<<1)) N<<=1,len++; 57 for (int i=0;i<=n;i++) pow2[i]=ksm(2,(1LL*i*(i-1))>>1); 58 fac[0]=1; 59 for (int i=1;i<=n;i++) fac[i]=1LL*i*fac[i-1]%mod; 60 for (int i=0;i<=n;i++) inv_fac[i]=ksm(fac[i],mod-2); 61 for (int i=2;i<(n<<2);i<<=1) Wn[0][i]=ksm(g,(mod-1)/i); 62 for (int i=2;i<(n<<2);i<<=1) Wn[1][i]=ksm(Wn[0][i],mod-2); 63 for (int i=2;i<(n<<2);i<<=1) inv_n[i]=ksm(i,mod-2); 64 for (int i=1;(1<<i)<(n<<2);i++) for (int j=0;j<(1<<i);j++) re[i][j]=rev(i,j); 65 for (int i=0;i<=m;i++) a[i]=1LL*pow2[i]*inv_fac[i]%mod; 66 for (int i=1;i<=m;i++) c[i]=1LL*pow2[i]*inv_fac[i-1]%mod; 67 } 68 void get_inv(int deg,int *a,int *b){ 69 if (deg==1){b[0]=ksm(a[0],mod-2);return;} 70 get_inv((deg+1)>>1,a,b); 71 int n=1,len=0; 72 while (n<(deg<<1)) n<<=1,len++; 73 for (int i=0;i<deg;i++) t[i]=a[i]; 74 for (int i=deg;i<n;i++) t[i]=0; 75 ntt(t,n,len,0),ntt(b,n,len,0); 76 for (int i=0;i<n;i++) b[i]=(2LL-1LL*t[i]*b[i]%mod+mod)*b[i]%mod; 77 ntt(b,n,len,1); 78 for (int i=deg;i<n;i++) b[i]=0; 79 } 80 int main(){ 81 init(); 82 get_inv(n,a,b); 83 ntt(b,N,len,0),ntt(c,N,len,0); 84 for (int i=0;i<N;i++) f[i]=1LL*b[i]*c[i]%mod; 85 ntt(f,N,len,1); 86 printf("%d\n",(int)(1LL*f[m]*fac[m-1]%mod)); 87 return 0; 88 }

?

轉載于:https://www.cnblogs.com/chenyushuo/p/4676033.html

總結

以上是生活随笔為你收集整理的bzoj3456: 城市规划的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲影视在线观看 | 漂亮少妇高潮午夜精品 | 亚洲图片激情小说 | 成人午夜视频免费观看 | 女性高潮视频 | 国产一级淫片a视频免费观看 | 日韩精品国产AV | 开心激情五月婷婷 | 波多野结衣av一区二区全免费观看 | 美女洗澡无遮挡 | 九九热九九爱 | 91免费网站入口 | 亚洲一区二区不卡视频 | av天堂一区| 亚洲av永久无码精品国产精品 | av在线天堂网 | 黄色无遮挡网站 | 蜜桃中文字幕 | 午夜激情导航 | 日本亲近相奷中文字幕 | 日韩免费黄色片 | 久久久久久久国产精品 | 黄色视屏在线看 | 操日本老太太 | 久久免费小视频 | 欧美日韩国产成人 | 成人激情开心网 | 美女人人操| 免费成人深夜夜行网站视频 | 色综合激情 | 1024手机看片日韩 | 69免费| 国产欧美日韩在线视频 | 久久精品一区二区三 | 狠狠干干干 | 丰满人妻一区二区三区性色 | 久久精品99国产国产精 | 国内精品999 | 免费av免费看 | 天天摸日日摸狠狠添 | 91精品导航 | 国产乱子伦视频一区二区三区 | 91色交| 一区二区在线精品 | 男人天堂99 | 日韩欧美一区二区三区在线观看 | 中文精品视频 | 国产精品一区二区无码对白 | 免费无码国产精品 | 亚洲熟妇av一区二区三区漫画 | 超碰91在线观看 | 草久在线 | 视频在线观看91 | 秋霞啪啪片 | 国产三级国产精品 | 亚洲综合无码一区二区 | 一级v片 | 亚洲一区二区三区四区不卡 | 欧美图片第一页 | 在线看片你懂的 | 午夜丁香婷婷 | 毛片在线看网站 | 亚洲乱色 | 亚洲欧美精品午睡沙发 | 国产免费黄色av | 亚洲一区二区在线视频 | 中国女人真人一级毛片 | 久久久精品人妻一区二区三区四 | 玖玖热在线视频 | 国产免费自拍视频 | 国产视频你懂得 | 精品一区二区免费视频 | 波多野42部无码喷潮在线 | 久热在线视频 | 国产毛片不卡 | 91久久久久久久久久久久久 | 乌克兰av在线 | 自拍99页 | 国产精品19乱码一区二区三区 | 一本色道久久88加勒比—综合 | 午夜视频在线观看视频 | 一级片黄色 | 国产乱子伦视频一区二区三区 | 好吊视频一区二区三区四区 | 456av| 亚洲成人自拍偷拍 | av资源网在线观看 | 日日躁夜夜躁aaaabbbb | 国产欧美熟妇另类久久久 | 亚洲av无一区二区三区久久 | 一级人爱视频 | 911精品国产一区二区在线 | 蜜桃tv一区二区三区 | 久久青青草视频 | 九一亚洲精品 | 亚洲黄色小说视频 | 亚洲欧美一区在线 | 成人免费视频国产免费麻豆 | 玖玖在线精品 |