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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

bzoj 1004

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

Pros

給若干個置換, 和三種顏色, 問有多少種本質不同的染色方案?

Sol

Burnside:

首先由 \(burnside\) 引理
\[Ans = \frac{\sum_{\:i = 1}^{\:m}\;f_i}{m}\]
其中 \(f_i\) 表示第 \(i\) 個置換的不動點的個數.
不動點的個數 就是在該置換下只有一種同構體的方案數.

置換的循環分解:

然后,前面 lyp 學長在這里講,
關于一個置換能夠分解成若干個環,
\(example:\)
\[ \begin{equation} \left( \begin{array}{ccccc} 1 & 2 & 3 & 4 & 5\\ 3 & 2 & 5 & 1 & 4\\ \end{array} \right) \end{equation} \]
包含環:\(1 \rightarrow 3 \rightarrow 5 \rightarrow 4 \rightarrow 1\)\(2 \rightarrow 2\)
對于任意一個環, 作用在上面的一次置換能夠讓這個環上面的元素循環移位一格.

不動點的條件

那么要讓這個環能夠成為不動點的充要條件就是,每個環上的顏色都是相同的.

然后,我們就能夠 DP 了. 預處理環是學的別人的,感覺挺漲見識的.

#include<cstdlib> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 100; int n,m,sr,sb,sg,p,ans; int f[maxn][maxn][maxn]; int g[maxn],vis[maxn],cir[maxn]; inline int dfs(int x){return vis[x] ? 0 : (vis[x] = 1, dfs(g[x]) + 1); } inline void init(){for(int i = 0; i < maxn; ++i) vis[i] = cir[i] = 0;memset(f,0,sizeof(f)); ans = 0; } inline void add_mod(int &a,int b){a = (a + b) % p; } inline int exgcd(int a,int b,int p){return p % a ?(exgcd(b % a, a, (-p % a + a) % a) * b + p) / a : p / a; } int main() {freopen("card.in","r",stdin);freopen("card.out","w",stdout);scanf("%d %d %d %d %d\n",&sr,&sb,&sg,&m,&p);n = sr + sb + sg; m++;for(int i = 1; i <= m; ++i){for(int j = 1; j <= n; ++j)i == m ? g[j] = j : scanf("%d",&g[j]);init();for(int j = 1; j <= n; ++j) if(!vis[j]) cir[++cir[0]] = dfs(j);f[0][0][0] = 1;for(int j = 1; j <= cir[0]; ++j)for(int k = 0; k <= sr; ++k)for(int l = 0; l <= sb; ++l){int &F = f[j][k][l], t = n - k - l;if(k >= cir[j]) add_mod(F, f[j-1][k - cir[j]][l]);if(l >= cir[j]) add_mod(F, f[j-1][k][l - cir[j]]);if(t >= cir[j]) add_mod(F, f[j-1][k][l]);}ans = (ans + f[cir[0]][sr][sb]) % p;}ans = ans * exgcd(m, p, 1) % p;printf("%d\n",ans);return 0; }

轉載于:https://www.cnblogs.com/Mr-ren/p/4297761.html

總結

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

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