题目描述

传送门

题解

在完全图中选出一个简单图
相当于是将所有的边染成两种颜色
其余的就和BZOJ1815一样了

代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define Mod 997
#define N 65int n,now,ans,dvd;
int a[N],b[N],mul[N],inv[N],t[N][N],mi[1800],f[N],c[N][N];int gcd(int a,int b)
{
    if (!b) return a;
    else return gcd(b,a%b);
}
int fast_pow(int a,int p)
{
    int ans=1;
    for (;p;p>>=1,a=a*a%Mod)
        if (p&1)
            ans=ans*a%Mod;
    return ans;
}
void calc()
{
    mul[0]=1;for (int i=1;i<=n;++i) mul[i]=mul[i-1]*i%Mod;
    mi[0]=1;for (int i=1;i<=n*(n-1)/2;++i) mi[i]=mi[i-1]*2%Mod;
    for (int i=1;i<=n;++i)
        for (int j=i;j<=n;++j) t[i][j]=gcd(i,j);
    for (int i=1;i<=n;++i) inv[i]=fast_pow(mul[i],Mod-2);
    for (int i=0;i<=n;++i) c[i][0]=1;
    for (int i=1;i<=n;++i)
        for (int j=1;j<=n;++j)
            c[i][j]=(c[i-1][j]+c[i-1][j-1])%Mod;
}
void dfs(int dep)
{
    if (!dep)
    {        int sum=0;
        for (int i=1;i<=now;++i)
            for (int j=i+1;j<=now;++j)
                sum+=t[a[i]][a[j]];
        for (int i=1;i<=now;++i) sum+=a[i]/2;        int cnt=n,tot=1;
        for (int i=1;i<now;++i)
        {            tot=tot*c[cnt][a[i]]%Mod;
            cnt-=a[i];
        }
        for (int i=1;i<=n;++i)
            if (b[i])
                tot=tot*inv[b[i]]%Mod;
        for (int i=1;i<=now;++i)
            tot=tot*mul[a[i]-1]%Mod;        ans=(ans+tot*mi[sum])%Mod;
        return;
    }
    for (int i=a[now];i<=dep;++i)
    {        a[++now]=i;
        ++b[a[now]];
        dfs(dep-i);
        --b[a[now]];
        --now;
    }
}
int main()
{
    scanf("%d",&n);calc();
    now=0;a[0]=1;dfs(n);
    ans=ans*fast_pow(mul[n],Mod-2)%Mod;
    printf("%d\n",ans);
}

[BZOJ1488][HNOI2009]图的同构(dfs+置换群+数论+组合数学)相关推荐

  1. BZOJ1488: [HNOI2009]图的同构

    BZOJ1488: [HNOI2009]图的同构 Description 求两两互不同构的含n个点的简单图有多少种. 简单图是关联一对顶点的无向边不多于一条的不含自环的图. a图与b图被认为是同构的是 ...

  2. 【BZOJ1485】[HNOI2009]有趣的数列(组合数学)

    [BZOJ1485][HNOI2009]有趣的数列(组合数学) 题面 BZOJ 洛谷 题解 从小往大填数,要么填在最小的奇数位置,要么填在最小的偶数位置. 偶数位置填的数的个数不能超过奇数位置填的数的 ...

  3. BZOJ 1488 Luogu P4727 [HNOI2009]图的同构 (群论、Burnside引理、组合计数)

    题目链接 (Luogu) https://www.luogu.org/problem/P4727 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.ph ...

  4. BZOJ 1488 Luogu P4727 [HNOI2009]图的同构 (Burnside引理、组合计数)

    题目链接 (Luogu) https://www.luogu.org/problem/P4727 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.ph ...

  5. 算法基础 - 数论 | 组合数学 卡特兰数(Catalan number)定义、证明及例题

    写在前面:卡特兰数这东西感觉挺常用的,并且公式很简单,那就花一下午总结一下,学点皮毛吧(反正遇到我还是不会 ) [PDF] 大三上组合数学课堂讲义 文章目录 卡特兰数定义 卡特兰数的性质 卡特兰数证明 ...

  6. BZOJ 1488 [HNOI2009]图的同构 Polya定理

    题意:链接 方法: Polya定理 解析: 先扯点题外话. 小雨淅沥的下午,PoPoQQQ爷在屠了一道题后放松心情,恰看见我把知识点上的群论标记已会. 于是,为了发扬D人的精神,PoPoQQQ爷打开了 ...

  7. 0x35.数论 - 组合数学与计数

    目录 一.计数原理 1.加法原理 2.乘法原理 3.减法原理 二.排列组合 1.排列数 2.组合数 3.数学题 三.组合数的计算 1. 加法递推O(n2)O(n^2)O(n2) 2. 乘法递推O(n) ...

  8. Codeforces Round #450 (Div. 2)D. Unusual Sequences[数论][组合数学][dp II]

    题目:http://codeforces.com/contest/900/problem/D 题意:找到加和为m的且gcd为n的数列种类数 分析:可以转化为求gcd为1的加和为m/n的种类数,假设有m ...

  9. P2638-安全系统【数论,组合数学】

    正题 题目链接:https://www.luogu.org/problem/P2638 题目大意 aaa个不同的000,bbb个不同的111.nnn个位置每个可以放0,10,10,1可以都放也可以不放 ...

  10. P4562-[JXOI2018]游戏【数论,组合数学】

    正题 题目链接:https://www.luogu.org/problemnew/show/P4562 题目大意 l∼rl\sim rl∼r的变化,每次访问第iii个那么iii的倍数就不用访问了.对于 ...

最新文章

  1. 基于redis的cas集群配置(转)
  2. Java判断文件类型
  3. 未处理的异常:进程性能计数器已禁用
  4. mysql utf8跟utf8mb4_MySQL utf8 和 utf8mb4 的区别
  5. TowlHub,它不是一个简单的纸巾架
  6. python怎么用for循环找出最大值_在for循环Python中查找前10个最大值
  7. Bear in the Field(CF-385E)
  8. Java基础学习总结(105)——让 Java 开发更简单,提高工作效率!
  9. 任务管理器中arcsom.exe和arcsoc.exe的个数问题
  10. 这些话,是乔布斯给世间留下的真正伟大礼物
  11. MATLAB对数坐标图和统计图(semilogy/loglog)
  12. 前端HTML、CSS学习完整笔记(中下篇)
  13. 在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 7939(unattended-upgr)持有... 32秒
  14. 十人面试就我通过,只因我答对了这题TCP协议为什么需要三次握手
  15. DateTime日期差
  16. ICH10R服务器主板是什么芯片,主板上面都有啥?常见板载芯片功能介绍(一)
  17. 网易云课堂Linux运维在线班英文单词笔记
  18. 作为一个研发背景出身的项目经理写给IT面试者的几点建议
  19. 蓝海创意云丨刺杀小说家:中国第一部大规模用虚拟拍摄的真人电影
  20. Windows保护模式(五)任务段任务门

热门文章

  1. 如何编写简洁的代码?
  2. 小程序源码:长期稳定短视频去水印-多玩法安装简单
  3. AI人工智能+区块链+物联网+大数据可视化平台建设综合解决方案
  4. 动物基因组测序基础分析流程总结(GWAS全流程第一部分:WGS基础流程)
  5. 学建模从软件开始,8款超级好用的3d建模软件
  6. Java泛型类继承实现
  7. linux系统中lib,lib-dev,lib-dbg库的区别
  8. Excel在统计分析中的应用—第二章—描述性统计-Part5-峰度(峰值和矩峰度系数)
  9. 利用laravel框架创建todos
  10. UPD(user datagram protocol)