Description

在光之大陆的土地上,各种势力盘根错节。来自光之峡谷的精灵,来自黑暗森林的亡灵,来自古老东方的人类共同生活在一起。善于打造装置的矮人,善于发明的侏儒,隐匿于山林的巨人也坚守着属于自己的领土。这些种族之间关系错综复杂,构成了极其庞大的关系网络。大魔法师小 P 想要研究其中的种族关系。
两个物种之间可以是盟友,也可以不是盟友,如果 a1,a2..an 满足 ai 和 ai+1 是盟友,且 an 和 a1 是盟友,则他们构成了一个联盟。
由于光之大陆正处于微妙的和平之中。所以一个合理的物种关系应满足如下条件 :
1 、对于任意两个物种 A,B, 都存在一个序列 A,a1,a2..an,B, 使得任意相邻两个种族是盟友 ( 注意 A,B 不一定是盟友 ) 。
2 、对于任意两个联盟 Sa,Sb, 都不存在一个物种既参加了联盟 Sa ,又参加了联盟 Sb 。
小 P 想知道,大陆上的 N 个种族一共有多少种可能的结盟关系,由于结果可能很大,你只需要输出答案 mod M 的值。

Input

一行两个正整数: N,M (含义如题所述)

Output

一个整数: ans 表示方案 mod M 的值

啊还是感觉碰到数学题就头大呀...

首先有一个很重要的结论,n个点选出一部分作为一个有m个大点(即树的点可以是一个环,边还是边)的生成树的方案数为n的m-2次方,由prufer编码可以得到。

根据题目的条件我们可以分析出,根据题目描述的关系,得出的图是一个有些点是一个环的树。那么如果我们用dp[i][j]表示考虑到第i个点,分成j个环的方案数,那么可以考虑以下转移

首先可以考虑枚举最后一个环的大小,设最后一个环的大小为k,首先因为环的排列不同,由环排列可知该环有(k-1)!种排列方案,又因为对称性所以为(k-1)!/2种,又因为一个环在树上的接口不同,则树的形态也不同,所以要再乘上k,表示换上每一个位置接到书上的不同方案。接着又因为是从i个点里选k个组成这棵树,又因为是无序的,所以共用c(i-1,k-1)种方案,那么便可以推出来dp方程dp[i][j]=Σ(k=1,k<=i) dp[i][k]*c[i-1][k-1]*fac[k-1]/2*k。

最后又因为上面的公式,所以答案就为Σ(k=1,k<=i) dp[i][k]*n^(k-2)次方,因为k=1的时候k-2次方为分数,所以k=1要单独处理(因为n个点就形成了一个环,所以就是一个环上的排列数/2即可)。

下附AC代码。

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define maxn 205
using namespace std;
typedef long long ll;
ll n,mod;
ll fac[maxn];
ll mypow[maxn];
ll c[maxn][maxn];
ll dp[maxn][maxn];
int main()
{scanf("%lld%lld",&n,&mod);c[0][0]=1;for(int i=1;i<=n;i++){c[i][0]=1;c[i][i]=1;for(int j=1;j<i;j++){c[i][j]=c[i-1][j-1]+c[i-1][j];if(c[i][j]>=mod) c[i][j]-=mod;}}fac[1]=1%mod;fac[3]=3%mod;for(int i=4;i<=n;i++) {fac[i]=fac[i-1]*i;fac[i]%=mod;}dp[0][0]=1;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){for(int k=1;k<=i;k++){dp[i][j]+=((ll)c[i-1][k-1]*dp[i-k][j-1]*fac[k])%mod;if(dp[i][j]>=mod) dp[i][j]-=mod;}}}int ans=1;for(int i=3;i<=n-1;i++){ans*=i;ans%=mod;}int temp=1;for(int i=2;i<=n;i++){ans+=((ll)dp[n][i]*temp)%mod;if(ans>=mod) ans-=mod;temp*=n;temp%=mod;}printf("%d\n",ans);
}

snoi 省选模拟赛day2t1 bzoj 2873: 光之大陆相关推荐

  1. 省选模拟赛记录(越往下越新哦~~~)

    LOG 模拟赛 第一次见尼玛这么给数据范围的-- 开考有点困,迷迷糊糊看完了三道题,真的是像老吕说的那样,一道都不会-- 思考T1,感觉有点感觉,但是太困了,就先码了暴力,发现打表可以50分,于是就大 ...

  2. 省选模拟赛2022/3/23

    省选模拟赛2022/3/23 比赛时间安排 赛后总结反思 与正解的差距 T1 T2 T3 比赛时间安排 7.30-7.40 t1 n<=10,全排列一下跳叶子结点的顺序暴力搞 t2 题意感觉好复 ...

  3. 省选模拟赛2022/3/31

    省选模拟赛2022/3/31 比赛时间安排 赛后反思总结 与正解的差距 T3 比赛时间安排 7.50-8.10 t1 暴力复杂度都很大啊,完全没想法 t2 dfs可以试一试,但是感觉复杂度还是会炸,想 ...

  4. 省选模拟赛(正睿的最后一场)

    省选模拟赛(正睿的最后一场!!) 比赛时间安排 与正解的差距 T1 比赛时间安排 7.30-7.40 t1 能拿10分dfs,n=0的情况或许可以找规律 t2 看不懂 t3 暴力挺好写的,求lca太麻 ...

  5. NOI2019省选模拟赛 第五场

    爆炸了QAQ 传送门 \(A\) \(Mas\)的童年 这题我怎么感觉好像做过--我记得那个时候还因为没有取\(min\)结果\(100\to 0\)-- 因为是个异或我们肯定得按位考虑贡献了 把\( ...

  6. test 7 3-22 2021省选模拟赛seven

    文章目录 考试复盘 人生 赢家 黑红兔 考试复盘 T1T1T1 subtask1:n≤5subtask1:n\le 5subtask1:n≤5,暴搜点的颜色状态以及边的存在状态 对于一条连接相同颜色点 ...

  7. 20200515省选模拟赛B、幻化成风(毒瘤容斥题+构造容斥系数+生成函数+hash状压DP+Trie树优化背包)

    题解 花了一上午+一中午终于把这道题A了 首先,我们要求的是bi互不相同的合法方案数 我们可以枚举一个a的集合S,来强制里面的b全部都相同,然后其它的随便放 由于这个题的n的约数非常多,我们可以把它质 ...

  8. NOI2019省选模拟赛 第六场

    传送门 又炸了-- \(A\) 唐时月夜 不知道改了什么东西之后就\(A\)掉了\(.jpg\) 首先,题目保证"如果一片子水域曾经被操作过,那么在之后的施法中,这片子水域也一定会被操作&q ...

  9. FCS省选模拟赛 Day5

    传送门 Solution Code #include<bits/stdc++.h> #define ll long long #define max(a,b) ((a)>(b)?(a ...

最新文章

  1. 语义分割--Label Refinement Network for Coarse-to-Fine Semantic Segmentation
  2. windows 7系统搭建PHP网站环境
  3. expressjs路由匹配规则
  4. 有关c++中const用法
  5. 判别式和产生式的区别
  6. 【Python成长之路】词云图制作
  7. appium+python自动化51-adb文件导入和导出(pull push)
  8. 中国酸性蒸汽清洗系统市场趋势报告、技术动态创新及市场预测
  9. mysql监视器MONyog的使用
  10. 多操作赋的语义判断(如 int *a和int* a)
  11. [51单片机] 串口通讯 简单通信
  12. 躲避方块的球——C语言游戏
  13. 20款英文LOGO字体
  14. java DFS与BFS算法
  15. 010项目沟通管理和干系人管理
  16. 学习用PS美化软件界面
  17. R语言利用wordcloud2绘制词云
  18. 关于nmap -O扫描中出现索尼手机的一份调研
  19. js 简易的筋斗云,图片动画
  20. 数据洪流时代,企业转型需要修建自己的“都江堰”

热门文章

  1. springmvc+mybatis+spring 整合 bootstrap html5 mysql
  2. 焓差法 空调制冷量 计算方法
  3. 西安python培训机构贴吧
  4. java成长道路必备技能
  5. Windows10家庭版的账号模糊不清使用而导致问题的修复
  6. h3c 交换机 s5048PV5-EI stp配置
  7. 如何在电脑上录音给视频配乐
  8. 第一个Python小程序(Hello World!)
  9. 在petalinux下提示:Failed to menu config project component....
  10. 中英文说明书丨艾美捷卡那霉素ELISA试剂盒方案