Jzoj5418 合影
来源:互联网 发布:爱之谷源码 编辑:程序博客网 时间:2024/05/17 04:18
题目背景
热烈庆祝北京师范大学附属实验中学成立100周年!
问题描述
经过一天的忙碌,志愿者们结束了他们的工作,准备站在一排合影留念。
热烈庆祝北京师范大学附属实验中学成立100周年!
问题描述
经过一天的忙碌,志愿者们结束了他们的工作,准备站在一排合影留念。
现在总共有n名志愿者留下来准备合影。不过,进程并不是那么顺利,有些同学提出了一些奇奇怪怪的要求(每个人最多只会提出一个):他必须站在另外一个同学的左边(不一定相邻),仁慈的老师满足了他们的要求。这时,其中一位来自11班的同学小Z陷入了沉思:总共有多少种不同的合法方案数呢?(两种方案不同当且仅存在至少一名同学他在这两个方案当中站的位置不同。)小Z很快就算出来了,于是就把自己的这个问题告诉了好朋友小C。不过,由于小C的数学功底不足,小Z只要求他算出这个答案模质数p的余数就可以了。可就算这样,小C也不会做。为了显示自己的水平很高(实际上很低),他找到了你,并把你得出的答案报给小Z,所以你可一定要算对啊!
是一个组合数学的问题(而且我做过改了题面的版本,但是想不起来了!)
我们将所有的要求变成一颗树,若a要求在b前面,那么a<-b连一条边,若有x没有要求,连一条0->x的边
先判断有没有环,有就直接输出0
没有环,就从0开始dfs,当每个子树的方案都已经求出来后就可以用乘法原理合并了
其实就是每次将一堆节点插入到另一堆中,在乘上子树自己的方案数
#pragma GCC optimize("O3")#pragma G++ optimize("O3")#include<vector> #include<stdio.h>#include<string.h>#include<algorithm>#define N 200010 #define L long long using namespace std;L js[N],inv[N]; vector<int> s[N]; int f[N],sz[N],n,m,M,T; bool in[N],v[N];inline L C(int n,int m){ return js[n]*inv[m]%M*inv[n-m]%M; }inline L pow(L x,L k,L s=1){for(;k;x=x*x%M,k>>=1) if(k&1) s=s*x%M; return s;}inline bool dfs(int x){if(in[x]) return 1;if(v[x]) return 0;in[x]=v[x]=1;if(dfs(f[x])) return 1;in[x]=0; return 0;}inline L gAns(int x){L A=1; for(int i=0,z=s[x].size(),v;i<z;++i){A=A*gAns(v=s[x][i])%M;sz[x]+=sz[v]; A=A*C(sz[x],sz[v])%M; }++sz[x]; return A;}int _extend(){scanf("%d%d%d",&n,&m,&M); s[0].clear();memset(in,0,sizeof in); memset(v,0,sizeof v);memset(sz,0,sizeof sz); memset(f,0,sizeof f);for(int i=*js=*inv=1;i<=n;++i) js[i]=js[i-1]*i%M,s[i].clear(); inv[n]=pow(js[n],M-2); for(int i=n;i;--i) inv[i-1]=inv[i]*i%M;for(int x,y;m--;s[f[x]=y].push_back(x)) scanf("%d%d",&x,&y); for(int i=1;i<=n;++i) if(!f[i]) s[0].push_back(i); v[0]=1; for(int i=1;i<=n;++i) if(!v[i] && dfs(i)) return 0&puts("0");printf("%lld\n",gAns(0));}int main(){freopen("photo.in","r",stdin);freopen("photo.out","w",stdout);for(scanf("%d",&T);T--;_extend());}
阅读全文
1 0
- Jzoj5418 合影
- JZOJ5418. 【NOIP2017提高A组集训10.24】合影
- 大学毕业合影
- 团队合影
- 合影效果
- 合影效果
- 技术中心团队合影
- 【从艳照门到合影
- 一群人的合影
- 与jClarityCEO合影
- CCF NOI1051 合影
- 07_合影效果
- 07:合影效果
- [导入]2005最后de合影
- 史上最全的一次team合影!
- ...刘烨晒与混血儿子合影
- 和学生们的合影
- 中国站长大会280多人集体合影
- Noip 2003 加分二叉树
- NOIP2017多校联测&提高组模拟23--A组
- notify()
- Noip 2006 能量项链
- oracle 练习题
- Jzoj5418 合影
- Js获取当前日期和农历日期
- 图片三级缓存
- bzoj 4569: [Scoi2016]萌萌哒
- 强软弱虚---强引用、软引用、弱引用、虚引用
- C# WEBSERVICE adcheck
- ABAP EXCEL 模板
- 【Spring】 (8)注解实现多线程
- Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈