zoukankan      html  css  js  c++  java
  • 「群论」

    群论基本概念:
    一种置换:一种排列方式.
    一个置换群:满足封闭性,结合律,分配律,存在唯一单位元,逆元的一个置换的集合.
    一个元素:某个置换条件下给所有点染色的一种方案.
    一个等价类:一种元素k对于一个置换群G来说变换成的所有元素的集合.
    不动点:一个元素使得对于某种置换后变换的染色情况不变.
    等价类个数L:G的作用把等价类全集分成的数目和.
    (Burnside):(L=sum_{iin G}frac{c_i}{|G|})
    (c_i)为i置换下的不动点个数.
    Burnside的含义,简而言之就是G的等价类数目=所有置换的不动点数目的平均数.
    (Polya):(L=sum_{iin G}frac{m^{h_i}}{|G|})
    (h_i)为i置换的循环节个数,m是颜色个数.
    Polya是Burnside的特殊情况应该是吧,毕竟没有任何限制条件.

    例题:
    1.Cards
    Burnside+背包
    n张牌,要求染成三种颜色,每种颜色的个数有限制,有m种置换,求|G|下的等价类个数.
    有限制无法使用Polya,所以用Burnside.
    考虑某种置换的不动点个数,就是满足对于该置换的任意循环节内所有元素都相等的方案数.
    问题变成的有x个大小为y的物品,求用a,b,c三种颜色染色有多少种可行的方案.
    背包转移即可.

    2.poj2154Color
    Polya
    环长n,可选颜色n种,求旋转同构的等价类个数.
    n=1e9
    其实不是很分的清楚旋转和翻转...
    旋转就是每个点都有做为1号点的一种方案.
    发现:
    对于一种旋转i(逆时针旋转i个物品)
    循环节个数为(gcd(i,n)),循环节长度(frac{n}{gcd(i,n)})

    3.poj2888 Magic Bracelet
    Burnside+矩阵快速幂
    环长n,有m种颜色,给定k种不相邻关系,问旋转同构等价类个数.
    n=1e9 m=10
    对于序列上的问题很容易通过矩阵快速幂优化dp统计出合法的方案数.
    对于环,只需要强行规定第一个颜色和最后一个(n+1)颜色相同.
    gcd 的处理同上.

    4.周末晚会
    Burnside+dp
    环长n,不能有超过k个女孩相邻,求旋转同构等价类个数.
    n=2000 k=2000
    不考虑环的情况很容易列出f[i][j]表示结尾是j个女孩的方案数.
    枚举每个循环节开头女孩个数x,贡献答案g[i][0~x-j].
    g[i][j]表示开头钦定是男孩结尾是j个女孩的方案数.
    容易发现g[i][j]=f[i-1][j].

  • 相关阅读:
    UVa 297 Quadtrees(树的递归)
    c++代码模板
    博客园 自定义CSS皮肤模板
    ubuntu 16.04 小键盘数字键盘开机自动启动
    set_union的几个例子
    CSU 1803 2016(数论)
    CSU 1809 Parenthesis(线段树+前缀和)
    UVA 253 Cube painting(暴力打表)
    洛谷 P1060 开心的金明
    Codeforces Round #369 (Div. 2) C. Coloring Trees(dp)
  • 原文地址:https://www.cnblogs.com/hzoi2018-xuefeng/p/12355473.html
Copyright © 2011-2022 走看看