题面

本质上是在对边求置换,然后每个循环里涂一样的颜色,但是还是要点上入手,考虑每条边的两个端点是否在一个循环里

如果在一个循环里,那么当循环长度$len$为奇数时只有转一整圈才行,而边的总数是$\frac{len(len-1)}{2}$,所以有$\frac{\frac{len(len-1)}{2}}{len}=\left\lfloor\frac{len}{2}\right\rfloor$个循环节;当循环长度为偶数时除了上面这种情况正对的每对点旋转$\frac{len}{2}$就可以,所以也是有$\frac{\frac{len(len-1)}{2}-frac{len}{2}}{len}+\frac{\frac{len}{2}}{\frac{len}{2}}=\left\lfloor\frac{len}{2}\right\rfloor$个循环节

如果不在一个循环里,那循环节数量就是套路的两者所在循环长度的GCD

那么暴搜数的拆分得到每种点置换就可以求出答案了,具体的,在总共$n!$种点置换中,每个循环节$i$自己做圆排列除去$len[i]$,同时每个长度的循环节之间的排列也要除去,所以设$cnt[i]$表示长度为$i$的循环节的数量,那么满足拆分$len[1],len[2],len[3].....len[m]$的点置换的方案数就是

$\frac{n!}{\prod\limits_{i=1}^mlen[i]\prod\limits_{i=1}^mcnt[i]!}$

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int n,m,p,ans,fac[N],inv[N],len[N];
int GCD(int a,int b)
{
return b?GCD(b,a%b):a;
}
int Qpow(int x,int k)
{
if(k==) return x;
int tmp=Qpow(x,k/);
return k%?1ll*tmp*tmp%p*x%p:1ll*tmp*tmp%p;
}
int Inv(int x)
{
return Qpow(x,p-);
}
void Calc(int cnt)
{
int pts=,bas=,lst=,sum=;
for(int i=;i<=cnt;i++)
{
bas=1ll*bas*len[i]%p;
if(len[i]!=len[lst])
bas=1ll*bas*fac[i-lst]%p,lst=i;
}
bas=1ll*bas*fac[cnt-lst+]%p;
pts=1ll*fac[n]*Inv(bas)%p;
for(int i=;i<=cnt;i++)
{
sum+=len[i]/;
for(int j=i+;j<=cnt;j++)
sum+=GCD(len[i],len[j]);
}
ans=(ans+1ll*pts*Qpow(m,sum)%p)%p;
}
void DFS(int cnt,int mnn,int mxx)
{
if(!mxx) Calc(cnt);
else
for(int i=mnn;i<=mxx;i++)
len[cnt+]=i,DFS(cnt+,i,mxx-i);
}
int main()
{
scanf("%d%d%d",&n,&m,&p);
fac[]=inv[]=;
for(int i=;i<=n;i++) fac[i]=1ll*fac[i-]*i%p;
inv[n]=Inv(fac[n]);
for(int i=n-;i;i--) inv[i]=1ll*inv[i+]*(i+)%p;
DFS(,,n),printf("%lld",1ll*ans*inv[n]%p);
return ;
}

解题:SHOI 2006 有色图的更多相关文章

  1. 【BZOJ 1815】【SHOI 2006】color 有色图

    http://www.lydsy.com/JudgeOnline/problem.php?id=1815 这道题好难啊,组合数学什么根本不会啊qwq 题解详见08年的Pólya计数论文. 主要思想是只 ...

  2. NOIP 2006 解题报告

    第一题: 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...

  3. 洛谷 P4128 [SHOI2006]有色图 解题报告

    P4128 [SHOI2006]有色图 题目描述 如果一张无向完全图(完全图就是任意两个不同的顶点之间有且仅有一条边相连)的每条边都被染成了一种颜色,我们就称这种图为有色图.如果两张有色图有相同数量的 ...

  4. 解题:CTSC 2006 歌唱王国

    题面 概率生成函数 对于菜鸡博主来说好难啊 其一般形式为$F(x)=\sum\limits_{i=0}^∞[x==i]x_i$,第i项的系数表示离散变量x取值为i的概率 一般的两个性质:$F(1)=1 ...

  5. 解题:SHOI 2014 概率充电器

    题面 显然就是在求概率,因为期望乘的全是1....然后就推推推啊 设$fgg[i]$表示这个点父亲没给他充上电的概率,$sgg[i]$表示这个点子树(和它自己)没给他充上电的概率,然后这个点没充上电的 ...

  6. 解题:ZJOI 2006 皇帝的烦恼

    禁止DP,贪心真香 有一个比较明显的贪心思路是让每个人和距离为$2$(隔着一个人)的人尽量用一样的,这样只需要扫一遍然后对每对相邻的人之和取最大值即可.但是当人数为奇数时这样就会出锅,因为最后一个人和 ...

  7. 解题:BJOI 2006 狼抓兔子

    题面 可以看出来是最小割,然后你就去求最大流了 这么大的范围就是让你用网络流卡的?咋想的啊=.=??? 建议还是老老实实用 平面图最小割等于其对偶图最短路 这个东西来做吧,虽然这个东西跑的也挺慢的,最 ...

  8. 解题:WC 2006 水管局长

    题面 初见LCT,动态最小生成树+链上查询max,具体做法是把边转换成点(LCT只能维护点) 时光倒流,先把最后剩的连起来.然后查询就看链上最大值,修改看看链上最大值是否大于当前边,如果是就断开原来的 ...

  9. 解题:POI 2006 PRO-Professor Szu

    题面 这个题是比较套路的做法啦,建反图后缩点+拓扑排序嘛,对于所有处在$size>=2$的SCC中的点都是无限解(可以一直绕) 然后注意统计的时候的小细节,因为无限解/大解也要输出,所以我们把这 ...

随机推荐

  1. PostgreSQL索引页

    磨砺技术珠矶,践行数据之道,追求卓越价值   [作者 高健@博客园  luckyjackgao@gmail.com] 本页目的,是起到索引其他所有本人所写文档的作用: 分类一:PostgreSQL基础 ...

  2. 事务特性,事务的隔离级别,并发事务可能出现的问题,spring事务 数据库锁

    1.0 事务特性(ACID) Atomicity:原子性,一个事务不可以被拆分 Consistency:一致性,在事务执行前数据库的数据处于正确的状态,而事务执行完成后数据库的数据还是处于正确的状态, ...

  3. Activity猫的一生-故事解说Activity生命周期

    大家好,关于Android中Activity的生命周期,网上大多数文章基本都是直接贴图.翻译API,比较笼统含糊不清. 我就用故事来说一说: 有个人叫User,TA养了几只猫,有只猫叫Activity ...

  4. Error:Could not find common.jar (android.arch.core:common:1.0.0)

    Error:Could not find common.jar (android.arch.core:common:1.0.0). Searched in the following location ...

  5. 软件测试_Loadrunner_APP测试_性能测试_脚本录制_基本操作流程

    这次主要是写一下使用Loadrunner对APP进行性能测试的基本流程,有关性能测试监控指标请查看链接:软件测试_性能测试_关注点. 先决条件:已安装Loadrunner.如未安装,请查看链接:软件测 ...

  6. Kali信息收集-搜索引擎

    1.google hacking intext:搜索正文内容 intitile:网页标题中的内容 inurl:url中的关键字 site:目标站点下 filetype:文件类型 cache:缓存 li ...

  7. PAT甲题题解-1074. Reversing Linked List (25)-求反向链表

    题意说的很清楚了,这种题的话,做的时候最好就是在纸上自己亲手模拟一下,清楚一下各个指针的情况, 这样写的时候就很清楚各个指针变量保存的是什么值. PS:一次AC哈哈,所以说自己动手在纸上画画还是很有好 ...

  8. PAT甲题题解1098. Insertion or Heap Sort (25)-(插入排序和堆排序)

    题目就是给两个序列,第一个是排序前的,第二个是排序中的,判断它是采用插入排序还是堆排序,并且输出下一次操作后的序列. 插入排序的特点就是,前面是从小到大排列的,后面就与原序列相同. 堆排序的特点就是, ...

  9. SCRUM 12.17

    今天,我们的用户统计功能终于上线了!! 大家辛苦工作了许久.我们测试的用户统计功能效果模拟如下 还有一些好消息,比如,我们的应用在小米平台收到了崩溃的反馈报告. 这说明我们留下的一些BUG暴露了出来, ...

  10. 《Linux内核分析》第三周学习小结 构造一个简单的Linux系统OS

    郝智宇 无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第三周 构造一个简单的Linux系统Me ...