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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

BZOJ 1815: [Shoi2006]color 有色图 [Polya DFS 重复合并]

發布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ 1815: [Shoi2006]color 有色图 [Polya DFS 重复合并] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傳送門

題意:

染色圖是無向完全圖,且每條邊可被染成k種顏色中的一種。
兩個染色圖是同構的,當且僅當可以改變一個圖的頂點的編號,使得兩個染色圖完全相同。
問N個頂點,k種顏色,本質不同的染色圖個數(模質數N≤53,P<109)。


想了一節課和一中午又看了課件

相同類型的循環合并的想法很巧妙

首先,點的置換對應唯一邊的置換,我們可以枚舉所有點的置換,找出每個置換下邊置換的循環有多少個,然后套$Polya$公式

但是復雜度帶嘆號

我們發現,很多點置換類型是一樣的,我們可以對$n$搜索劃分來枚舉點置換的類型(即每個循環的長度),然后找出這種類型的置換有多少個

設每個循環長度$L_1,L_2,...,L_n$,那么相同類型的置換就相當于每個循環做圓排列,然后消除循環長度相同的影響

$\frac{n!}{L_1 L_2...L_n s_1! s_2!...s_t!}$

$s$為相同的長度的個數

那么如何從點的置換得到邊的置換?

同一個循環里的邊,他們的循環個數為$\frac{L}{2}$,具體可以把點排成一個圈畫圖觀察一下

兩個循環之間的邊,他們的循環長度為$LCM(L_1,L_2)$,共有$L_1*L_2$條邊,則個數為$GCD(L_1,L_2)$

?

然后就可以做了

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int N=60; typedef long long ll; 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 n,m,P; ll inv[N],fac[N],facInv[N]; void ini(){inv[1]=1;fac[0]=facInv[0]=1;for(int i=1;i<=n;i++){if(i!=1) inv[i]=-P/i*inv[P%i]%P;if(inv[i]<0) inv[i]+=P;fac[i]=fac[i-1]*i%P;facInv[i]=facInv[i-1]*inv[i]%P;} } int L[N],tot; ll sum,ans; inline int gcd(int a,int b){return b==0 ? a : gcd(b,a%b);} inline ll Pow(ll a,int b){ll re=1;for(;b;b>>=1,a=a*a%P)if(b&1) re=re*a%P;return re; } inline void mod(ll &x){if(x>=P) x-=P;} void dfs(int d,int now){if(d==n){int lo=0;ll cnt=fac[n],same=1;sort(L+1,L+1+tot);//printf("tot %d\n",tot);//for(int i=1;i<=tot;i++) printf("%d ",L[i]);puts("\n end");for(int i=1;i<=tot;i++){lo+=L[i]/2;for(int j=i+1;j<=tot;j++) lo+=gcd(L[i],L[j]);cnt=cnt*inv[L[i]]%P;if(i!=1&&L[i]==L[i-1]) same++;else if(same!=1) cnt=cnt*facInv[same]%P,same=1;}if(same!=1) cnt=cnt*facInv[same]%P;//printf("hi %d %lld\n",lo,cnt);mod(sum+=cnt);mod(ans+=cnt%P*Pow(m,lo)%P);//puts("\n");}else{for(int j=now;d+j<=n;j++){L[++tot]=j;dfs(d+j,j);tot--;}} } int main(){freopen("in","r",stdin);n=read();m=read();P=read();ini();dfs(0,1);//printf("%lld %lld\n",ans,sum);ans=ans*Pow(sum,P-2)%P;printf("%lld",ans); }

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的BZOJ 1815: [Shoi2006]color 有色图 [Polya DFS 重复合并]的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲v国产v | 一区二区视频免费看 | 亚洲在线精品视频 | 欧美午夜性春猛交 | 香蕉视频一区二区三区 | fc2ppv在线观看| 成人免费看片在线观看 | 美女又爽又黄又免费 | 日韩成人免费在线观看 | 男女被到爽流尿 | 性综合网| 伊人久久超碰 | 亚洲一区视频网站 | 咪咪色影院 | 天天躁日日躁狠狠躁伊人 | 日日插插| 18禁裸乳无遮挡啪啪无码免费 | 韩国av在线免费观看 | 中文精品一区二区三区 | 国产一区二区三区观看 | 国产精品一区二区网站 | www.com毛片| 捆绑束缚调教 | 91玖玖| 538精品在线视频 | 91原创视频| 久久综合五月天 | 岛国毛片在线观看 | 欧美一级大片在线观看 | www国产亚洲精品 | 黄色一毛片 | 免费观看黄一级视频 | 白丝校花扒腿让我c | 日韩欧美国产一区二区三区在线观看 | 日本三级在线视频 | 日韩精品视频一区二区三区 | 欧美性猛交xxx乱久交 | 日韩第四页 | 欧美日韩一区二区三区国产精品成人 | 麻豆入口| 蜜臀国产AV天堂久久无码蜜臀 | 尹人av| 亚洲欧美日韩精品久久亚洲区 | 欧美乱强伦| 精品久久久久久久久久久久久久久 | jiizzyou性欧美老片 | 少女忠诚电影高清免费 | 91香蕉视频在线 | 欧美精品性生活 | 人人爱人人艹 | 蜜臀免费av | 久热精品视频在线 | 天堂在线中文 | 天天干天天做 | 精品爆乳一区二区三区无码av | 中文字幕一区二区三区乱码 | 亚洲二区精品 | 伊人精品视频 | 国产无遮挡又黄又爽 | 美女赤身免费网站 | 中文字幕高清在线免费播放 | 一区二区三区四区不卡 | 麻豆av网 | 日韩国产欧美一区二区三区 | 黄色精彩视频 | 天天操夜夜骑 | 阿v视频在线免费观看 | 91极品国产 | 中文字幕在线观看不卡 | 婷婷国产成人精品视频 | 日韩伦理一区 | 中文字幕在线视频观看 | 中文国产| 亚洲精品一区二区三区不卡 | jizz在线观看 | 在线观看视频免费 | 夜夜操网址 | www.av777| 亚洲精品久久久蜜桃 | 亚洲乱熟女一区二区 | 午夜成人影视 | 亚洲ⅴ国产v天堂a无码二区 | 91日韩在线视频 | 人人射av | 午夜免费福利小电影 | 国产日产精品一区二区三区四区 | 国产精品高潮呻吟久久aⅴ码 | 38激情| 欧美大肥婆大肥bbbbb | 黑人操亚洲美女 | 2021毛片| 国产9区 | 成人在线观看视频网站 | av手机网站| 国产99色 | 美国av导航 | 奇米色综合 | 精品亚洲一区二区三区四区五区 | 国产suv精品一区二区33 |