SGU - 282

题解

题意:

本质不同的集合:不存在两个方案重新编号之后对应的边集相同(对于所有x,y,,(x,y)边颜色都相同)。

(1≤ N≤ 53, 1≤ M≤ 1000)

对P取模

本质不同,想到置换

置换在哪里?

就是重新编号

本质是一个n!大小的置换群

不能枚举每一个置换了,考虑对相同的置换一起处理

置换之后也要找环,所以直接枚举环的情况,处理对应这种环的组合的置换的出现次数,再处理环的组合的不动点

自然数拆分出环

环长为li,有k个,对应置换个数:

如果每一个都不同:$\frac{n!}{(l1!*l2!..lk!)}*((l1-1)!)*((l2-1)!)*((lk-1)!)$

如果

就是分配环的所属的时候,大小相同的环都是相同的。

所以再进行一次多重集合的排列。

每个置换的不动点个数:

考虑环自己内部连边的“环”个数:$1+\lfloor \frac{l-2}{2} \rfloor$

证明考虑边上相隔1一定一种,相隔若干会连出一些,手画几个

2->1

3->1

4->2

5->2

6->3

7->3

环与环之间的连边的“环”个数:$gcd(l1,l2)$

一个连边的颜色,会走$lcm(l1,l2)$才会重复,

期间l1的每个点连出去了lcm(l1,l2)/l1=l2/gcd(l1,l2)

一共连出去l2个点,每确定一个颜色就确定了l2/gcd(l1,l2)个颜色,所以共有gcd(l1,l2)个“环”

环总数tot

每个环m种颜色,m^tot即可。

1.自然数拆分+计算对应置换个数->枚举所有置换

2.每个自然数拆分计算不动点个数+再乘上对应置换个数->处理所有不动点

完毕。

SGU - 282的更多相关文章

  1. 组合计数(polya计数):SGU 282 Isomorphism

    因为论文的题解写得太好了,直接贴. #include <iostream> #include <cstring> #include <cstdio> using n ...

  2. SGU 495. Kids and Prizes

    水概率....SGU里难得的水题.... 495. Kids and Prizes Time limit per test: 0.5 second(s)Memory limit: 262144 kil ...

  3. ACM: SGU 101 Domino- 欧拉回路-并查集

    sgu 101 - Domino Time Limit:250MS     Memory Limit:4096KB     64bit IO Format:%I64d & %I64u Desc ...

  4. 【SGU】495. Kids and Prizes

    http://acm.sgu.ru/problem.php?contest=0&problem=495 题意:N个箱子M个人,初始N个箱子都有一个礼物,M个人依次等概率取一个箱子,如果有礼物则 ...

  5. SGU 455 Sequence analysis(Cycle detection,floyd判圈算法)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=455 Due to the slow 'mod' and 'div' operati ...

  6. SGU 422 Fast Typing(概率DP)

    题目大意 某人在打字机上打一个字符串,给出了他打每个字符出错的概率 q[i]. 打一个字符需要单位1的时间,删除一个字符也需要单位1的时间.在任意时刻,他可以花 t 的时间检查整个打出来的字符串,并且 ...

  7. sgu 104 Little shop of flowers 解题报告及测试数据

    104. Little shop of flowers time limit per test: 0.25 sec. memory limit per test: 4096 KB 问题: 你想要将你的 ...

  8. 树形DP求树的重心 --SGU 134

    令一个点的属性值为:去除这个点以及与这个点相连的所有边后得到的连通分量的节点数的最大值. 则树的重心定义为:一个点,这个点的属性值在所有点中是最小的. SGU 134 即要找出所有的重心,并且找出重心 ...

  9. SGU 170 Particles(规律题)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=170 解题报告:输入两个由'+'和'-'组成的字符串,让你判断第二个串能不能由第一个 ...

随机推荐

  1. PyCharm添加Selenium与Appium类库

    PyCharm添加Selenium与Appium依赖, 不需要用pip去安装!

  2. java后台接受web前台传递的数组参数

    前台发送:&warning_type[]=1,2 &warning_type=1,2 后台接收:(@RequestParam(value = "param[]") ...

  3. 【WXS数据类型】Array

    属性: 名称 值类型 说明 [Array].constructor [String] 返回值为“Array”,表示类型的结构字符串 [Array].length [Number] 返回数组长度 方法: ...

  4. Java并发基础--Lock的学习

    一.Lock的出现 Lock的主要作用实现线程之间的同步互斥,与synchronized关键字的效果是一样的,synchronized是Java语言内置的特性,那么为什么又出现了Lock呢?原因是sy ...

  5. 莱布尼兹三角形(C++)

    [问题描述] 如下图所示的三角形,请编程输出图中排在第 n 行从左边数第 m 个位置上的数. [代码展示] # include<iostream># include<cstdio&g ...

  6. leetcode个人题解——#18 4sums

    在3sums的基础上加了一层循环. class Solution { public: vector<vector<int>> fourSum(vector<int> ...

  7. Centos下的SVN搭建

    需求: 搭建SVN实现本地开发环境,方便线上代码的更新. 步骤: 1. 安装SVN服务 yum install -y subversion 2.创建SVN代码库的目录.创建版本库 mkdir -p / ...

  8. 【转】自定义(滑动条)input[type="range"]样式

    1.如何使用滑动条? 用法很简单,如下所示: <input type="range" value="0"> 各浏览器原始样式如下: Chrome:  ...

  9. C++计算器项目的初始部分(第三次作业)

    C++计算器项目的初始部分 项目源文件地址:calculator 项目信息: * 项目名称:Calculator * 项目实现: * 对四则运算表达式进行拆解 * 对拆解的表达式进行简单的错误判断 * ...

  10. android入门 — PopupWindow

    第一步:自定义xml文件 第二步:获取LayoutInflater对象 第三步:调用inflate()方法获取View对象 第四步:创建PopupWindow对象 第五步:调用PopupWindow的 ...