http://www.lydsy.com/JudgeOnline/problem.php?id=1815

这道题好难啊,组合数学什么根本不会啊qwq

题解详见08年的Pólya计数论文。

主要思想是只枚举具有代表性的点的置换,算出这些点的置换造成的边的置换的保持不变的着色数(边的置换的保持不变的着色数我想了一天啊_(:з」∠)_),最后再乘上与这种具有代表性的点的置换同类的点的置换总数就可以了。

WA了好几次,中间一个地方忘取模了qwq

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 60; int n, m, p; int GCD(int a, int b) {return b ? GCD(b, a % b) : a;} int ipow(int a, int b) {
int ret = 1, w = a;
while (b) {
if (b & 1) ret = 1ll * ret * w % p;
w = 1ll * w * w % p;
b >>= 1;
}
return ret;
} int gcd[N][N], powm[N * N], jc[N], njc[N], ni[N]; int L[N], ans = 0; void solve(int tot) {
int res = jc[n], cnt = 1, ret = 0;
for (int i = 1; i <= tot; ++i)
res = 1ll * res * ni[L[i]] % p;
for (int i = tot - 1; i >= 0; --i) {
if (L[i] != L[i + 1]) {
res = 1ll * res * njc[cnt] % p;
cnt = 1;
continue;
}
++cnt;
} for (int i = 1; i <= tot; ++i)
ret += (L[i] >> 1);
for (int i = 1; i <= tot; ++i)
for (int j = 1; j < i; ++j)
ret += gcd[L[i]][L[j]];
(ans += 1ll * res * powm[ret] % p) %= p;
} void dfs(int tmp, int last, int rest) {
if (rest == 0) {
solve(tmp - 1);
return;
}
for (int i = last; i <= rest; ++i) {
L[tmp] = i;
dfs(tmp + 1, i, rest - i);
}
} int main() {
scanf("%d%d%d", &n, &m, &p);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= i; ++j)
gcd[i][j] = GCD(i, j); powm[0] = 1;
for (int i = 1, top = n * n; i <= top; ++i)
powm[i] = 1ll * powm[i - 1] * m % p; jc[0] = njc[0] = ni[0] = 1;
for (int i = 1; i <= n; ++i) {
jc[i] = 1ll * jc[i - 1] * i % p;
ni[i] = ipow(i, p - 2);
njc[i] = 1ll * njc[i - 1] * ni[i] % p;
} dfs(1, 1, n);
printf("%d\n", 1ll * ans * njc[n] % p);
return 0;
}

【BZOJ 1815】【SHOI 2006】color 有色图的更多相关文章

  1. bzoj 1815: [Shoi2006]color 有色图 置换群

    1815: [Shoi2006]color 有色图 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 136  Solved: 50[Submit][Stat ...

  2. BZOJ1815: [Shoi2006]color 有色图

    BZOJ1815: [Shoi2006]color 有色图 Description Input 输入三个整数N,M,P 1< = N <= 53 1< = M < = 1000 ...

  3. BZOJ 1815: [Shoi2006]color 有色图(Polya定理)

    题意 如果一张无向完全图(完全图就是任意两个不同的顶点之间有且仅有一条边相连)的每条边都被染成了一种颜色,我们就称这种图为有色图. 如果两张有色图有相同数量的顶点,而且经过某种顶点编号的重排,能够使得 ...

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

    传送门 题意: 染色图是无向完全图,且每条边可被染成k种颜色中的一种.两个染色图是同构的,当且仅当可以改变一个图的顶点的编号,使得两个染色图完全相同.问N个顶点,k种颜色,本质不同的染色图个数(模质数 ...

  5. bzoj 1478: Sgu282 Isomorphism && 1815: [Shoi2006]color 有色图【dfs+polya定理】

    参考 https://wenku.baidu.com/view/fee9e9b9bceb19e8b8f6ba7a.html?from=search### 的最后一道例题 首先无向完全图是个若干点的置换 ...

  6. 洛谷 P4128: bzoj 1815: [SHOI2006]有色图

    题目传送门:洛谷 P4128. 计数好题,原来是 13 年前就出现了经典套路啊.这题在当年应该很难吧. 题意简述: \(n\) 个点的完全图,点没有颜色,边有 \(m\) 种颜色,问本质不同的图的数量 ...

  7. 解题:SHOI 2006 有色图

    题面 本质上是在对边求置换,然后每个循环里涂一样的颜色,但是还是要点上入手,考虑每条边的两个端点是否在一个循环里 如果在一个循环里,那么当循环长度$len$为奇数时只有转一整圈才行,而边的总数是$\f ...

  8. BZOJ 1051 HAOI 2006 受欢迎的牛

    [题解] 先用tarjan缩点,然后如果某个强联通分量的出度为0,则该强联通分量内的点数为答案,否则无解.因为若其他所有的强联通分量都有边连向Ai,则Ai必定没有出边,否则Ai连向的点所属的强联通分量 ...

  9. [bzoj 3566][SHOI 2014]概率充电器

    传送门 Description SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件.进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定. 随后电能可以 ...

随机推荐

  1. hdu 1166敌兵布阵(线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    M ...

  2. [device tree] interrupt

    Specifying interrupt information for devices ============================================ 1) Interru ...

  3. 【LOJbeta round1】ZQC的手办

    NOI2012-超级钢琴的升级版. 用线段树维护最小值及其出现位置,接下来就跟超级钢琴一个做法了. #include<bits/stdc++.h> #define N 500010 #de ...

  4. windows下使用github

    1.首先到github.com注册用户: 2.下载git,地址:http://pan.baidu.com/s/1skPpWlB(64位下载):http://pan.baidu.com/s/1skOAa ...

  5. git清除用户名密码

    问题: remote: HTTP Basic: Access deniedfatal: Authentication failed for 'http://******** 解决方案: git con ...

  6. artdialog自定义多个按钮

    在实际运用到的过程中artdialog弹出框下面的按钮不止一个 可以自己定义多个按钮 function view_show(cust_id){$.dialog({        id: 'view_c ...

  7. 循环select查询结果集

    --标记id --每次查询特定列比标记id大的第一条数据, --同时更新标记id,直到查询结果为空 ) set @id='' begin @id=id from T_SGZ where id>@ ...

  8. linux命令(16):mv命令

    移动文件:mv /mnt/test.log /home 移动目录:mv -f /mnt/test /home [带-f参数如目的已存在同名文件,则直接覆盖掉] 文件改名:mv /mnt/test /m ...

  9. Linux 基础——处理文件与目录的命令

    继续第三天学习,每天下班后积累一点点,始终相信厚积薄发. 一.处理文件的命令 touch dest_file:在当前目录下创建指定的文件. cp source dest:将指定的猿文件复制到目标文件, ...

  10. [转载] 更改pip源至国内镜像,显著提升下载速度

    原文地址: https://blog.csdn.net/lambert310/article/details/52412059 经常在使用python的时候需要安装各种模块,而pip是很强大的模块安装 ...