解析

《关于我想了半天 dp 结果看题解 dfs 就行这回事》
我就说 gcd⁡\gcdgcd 这玩意 dp 个锤子啊…
拆分数的增长速度远没有想像中那么大,事实上,n=60n=60n=60 也就 1e6 左右。
据题解说,这玩意的增长速度仅有 O(enn)O(\frac{e^{\sqrt n}}{n})O(nen​​)。
需要注重加强对常见数列增长速度的概念。

先钦定一个排列是 n!n!n!,然后钦定不降的暴力枚举拆分 a1...ma_{1...m}a1...m​。

注意到,暴力枚举排列会算重,比如 (1,2,3)(1,2,3)(1,2,3) 会当成 (1,2,3),(2,3,1),(3,1,2)(1,2,3),(2,3,1),(3,1,2)(1,2,3),(2,3,1),(3,1,2) 计算三次,但这些置换本质是相同的。
所以答案要除上 ∏ai\prod a_i∏ai​(题解的解释是先除阶乘,再乘圆排列,也是合理的)。

大小相同的循环前后顺序是无所谓的,也会重复计数,假设每个大小的循环为 c1...kc_{1...k}c1...k​,要再除一个 ∏ci!\prod c_i!∏ci​!。

dfs 跑的飞快。

另外本题考场即使 dfs 跑不完,只要能在可以接受的时间内(考试时间内)跑完,就可以打表勒。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
const int N=2e6+100;
const int M=2e4+100;
const int inf=1e9;
const int mod=997;int n;int ksm(int x,int k){int res(1);while(k){if(k&1) res=res*x%mod;x=x*x%mod;k>>=1;}return res;
}
int gcd(int x,int y){return y?gcd(y,x%y):x;
}
int g[80][80],mi[N];
int ans,a[80],clo;
void calc(int k){++clo;int w(1),now(1),sum(1),s(1);for(int i=2;i<=k;i++){if(a[i]==a[i-1]) now++,s=s*now%mod;else{w=w*s%mod;now=s=1;}       }   w=w*s%mod;for(int i=1;i<=k;i++) sum=sum*a[i]%mod;int o(0);for(int i=1;i<=k;i++) o+=a[i]/2;for(int i=1;i<=k;i++){for(int j=1;j<i;j++) o+=g[a[i]][a[j]];}//for(int i=1;i<=k;i++) printf("%d ",a[i]);//printf("w=%d sum=%d o=%d\n",w,sum,o);ans=(ans+mi[o]*ksm(sum*w%mod,mod-2))%mod;
}
void dfs(int k,int lst,int lft){//printf("%d %d %d\n",k,lst,lft);if(lft==0){calc(k-1);return;}for(int i=lst;i<=lft;i++){a[k]=i;dfs(k+1,i,lft-i);}return;
}signed main(){#ifndef ONLINE_JUDGE//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);#endifn=read();for(int i=1;i<=n;i++){for(int j=1;j<=n;j++) g[i][j]=gcd(i,j);}mi[0]=1;for(int i=1;i<=n*n*n;i++) mi[i]=(mi[i-1]<<1)%mod;dfs(1,1,n);printf("%d\n",ans);//printf("clo=%d\n",clo);return 0;
}
/*
1
2
1 2
*/

洛谷P4727:图的同构计数(Polya引理)(dfs)相关推荐

  1. 洛谷 P1019 单词接龙 (DFS)

    题目传送门 当时一看到这题,蒟蒻的我还以为是DP,结果发现标签是搜索-- 这道题的难点在于思路和预处理,真正的搜索实现起来并不难.我们可以用一个贪心的思路,开一个dic数组记录每个单词的最小重复部分, ...

  2. Educational Codeforces Round 81 (Rated for Div. 2) F.Good Contest \ 洛谷 划艇 组合 计数dp

    cf传送门 P3643 [APIO2016]划艇 文章目录 题意: 思路: 题意: aia_iai​在[li,ri][l_i,r_i][li​,ri​]等概率随机选一个数,求aaa数组不增的概率. 思 ...

  3. 洛谷 最大食物链计数 python题解

    题目:P4017 最大食物链计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 给你一个食物网,你要求出这个食物网中最大食物链的数量. (这里的"最大食物链&q ...

  4. 2019.03.21【ZJOI2007】【BZOJ1095】【洛谷P2056】Hide 捉迷藏(DFS序)(线段树)

    BZOJ传送门 洛谷传送门 解析: 其实就是QTREE4的弱化版,可以直接用QTREE4的解法来做. 但是这道题有优秀的O(nlog⁡n)O(n\log n)O(nlogn)做法. 我们考虑利用DFS ...

  5. 洛谷 P2819 图的m着色问题#DFS回溯

    题目背景 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的.图的m着色问题是对于给定图G和m ...

  6. 洛谷p1162填涂颜色(dfs写法)

    这道题本是放在试炼场bfs里的,但是我觉得dfs好写些 所以就用dfs过了 题目如下 题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合 ...

  7. 洛谷 P1019 单词接龙 Label:dfs

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  8. 洛谷 P1176 路径计数2

    P1176 路径计数2 题目描述 一个N×N的网格,你一开始在(1, 1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N, N),即右下角有多少种方法. 但是这个问题太简单了, ...

  9. 洛谷 - P4197 Peaks(Kruskal重构树+dfs序+主席树)

    题目链接:点击查看 题目大意:有 n 座山峰,每座山峰有他的高度 h[ i ] ,有些山峰之间有双向道路相连,共 m 条路径,每条路径有一个困难值,这个值越大表示越难走. 现在有 q 组询问,每组询问 ...

最新文章

  1. 【BZOJ】1681: [Usaco2005 Mar]Checking an Alibi 不在场的证明(spfa)
  2. HTTP Content-Length与分块传输
  3. 我在上海的AI新地标,看懂了明略的游戏规则
  4. 详述@ResponseBody和@RequestBody注解的区别
  5. 03_属性别名映射的配置
  6. 论文笔记: Modeling Extreme Events in Time Series Prediction
  7. oracle怎么优化动态sql语句,oracle动态sql语句处理
  8. [PTA C语言]冒泡法排序
  9. noVNC使用浏览器替代VNC客户端
  10. 机器学习---黑箱原理
  11. Spring之Bean后处理器——InstantiationAwareBeanPostProcessor的使用与源码解析
  12. 视频会议十大开源项目排行
  13. 影响下载速度的因素--总结
  14. 7月11日自助装机配置专家点评
  15. 还原html默认打开方式,Win7旗舰版64位系统下如何还原文件默认打开方式
  16. 文本域换行 php,js获取textarea文本域自动换行符
  17. python变成exe需要python环境吗_[Python]py程序发布——Python环境移植和exe程序生成(无环境依赖性),pythonPy,以及,EXE...
  18. 教你做5种地图展现方法,无需代码,上手即会
  19. HTML5页面元素figure与figcaption标记的应用
  20. lisp不是函授型语言_讨论:为什么Lisp语言不再被广泛使用

热门文章

  1. 我是怎么用机器学习技术找到女票的
  2. c语言实现容器,C语言三种容器:list vector和deque的区别
  3. 热像仪 二次开发 c++_一种全新的红外热像仪——“可编程红外热像仪”
  4. 用python写简单爬虫,用Python写简单的爬虫
  5. 欧文分校的计算机科学博士,UCI的CS「加州大学欧文分校计算机科学系」
  6. javascript内存泄漏调试工具mac_node.js 内存泄漏的秘密
  7. 「软件项目管理」一文详解软件项目管理概述
  8. Java Character 方法
  9. [设计模式]依赖倒转原则
  10. java调优方法,jvm监控工具