H. Permutation Counting

2022/7/28

传送门https://codeforces.com/group/5zHJ4CTyoU/contest/392060/problem/H

图上计数,判环,拓扑。

题意:求n个数排列的方案数,满足m个限制条件:\(P_{x_i}<P_{y_i}\),题目保证没有相同的y

建成有向图图,是一个树林。

对于有环的图,答案为0。

对每颗树,树根用了他们的最大值,直接扔了不影响方案数,然后它的亲儿子们变成了新的树根,瓜分父亲遗产。假如树本有n个后代子节点,s个亲儿子,每个亲儿子分别有\(m_1,m_2...m_s\)个后代子节点。那么方案数有\(C_n^{m_1}*C_{n-m_1}^{m_2}...C_{m_s}^{m_s}\)

#include <bits/stdc++.h>
#define int long long
const int N = 4e6+10;
const int mo=998244353;
int a[N];
int fa[N];
int vis[N];
std::vector<int>to[N];
int ans=1;
int D[N],jc[N];
int q_pow(int a,int b){
int res=1;
while(b){
if(b&1)res=res*a%mo;
a=a*a%mo;
b>>=1;
}
return res;
}
int inv(int a){
return q_pow(a,mo-2);
}
int C(int n,int m){
int ans=jc[n];
ans=ans*inv(jc[m])%mo;
ans=ans*inv(jc[n-m])%mo;
return ans;
}
void init(){
D[2]=1;
for(int i=3;i<N;i++)D[i]=(i-1)*(D[i-1]+D[i-2])%mo;
D[0]=1;
jc[0]=1;
for(int i=1;i<N;i++)jc[i]=jc[i-1]*i%mo; }
bool check=1;
int dfs(int now){
vis[now]=1;
if(to[now].size()==0)return 1;
int sum=0; std::vector<int>ve;
for(int i:to[now]){
int k=dfs(i);
ve.push_back(k);
sum+=k;
}
int re=sum;
for(int i:ve){
ans*=C(sum,i);
ans%=mo;
sum-=i;
}
return re+1;
}
signed main(){
std::ios::sync_with_stdio(false);
init();
int n,m;std::cin>>n>>m;
for(int i=0;i<m;i++){
int x,y;
std::cin>>x>>y;
to[y].push_back(x);
fa[x]=y;
}
for(int i=1;i<=n;i++)if(!fa[i])to[0].push_back(i);
dfs(0);
for(int i=1;i<=n;i++)if(!vis[i])ans=0;
std::cout<<ans<<"\n";
}

H. Permutation Counting 判环,计数,拓扑的更多相关文章

  1. CodeForces 711D Directed Roads (DFS判环+计数)

    题意:给定一个有向图,然后你可能改变某一些边的方向,然后就形成一种新图,让你求最多有多少种无环图. 析:假设这个图中没有环,那么有多少种呢?也就是说每一边都有两种放法,一共有2^x种,x是边数,那么如 ...

  2. POJ 1094 Sorting It All Out(拓扑排序+判环+拓扑路径唯一性确定)

    Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39602   Accepted: 13 ...

  3. COJ 3012 LZJ的问题 (有向图判环)

    传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=1042 试题描述: LZJ有一个问题想问问大家.他在写函数时有时候很头疼,如 ...

  4. HDU 3342 Legal or Not(有向图判环 拓扑排序)

    Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  5. [hdu 6184 Counting Stars(三元环计数)

    hdu 6184 Counting Stars(三元环计数) 题意: 给一张n个点m条边的无向图,问有多少个\(A-structure\) 其中\(A-structure\)满足\(V=(A,B,C, ...

  6. [bzoj3012][luogu3065][USACO12DEC][第一!First!] (trie+拓扑排序判环)

    题目描述 Bessie has been playing with strings again. She found that by changing the order of the alphabe ...

  7. hdu 4324 Triangle LOVE(拓扑判环)

    Triangle LOVE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  8. CodeForces-1217D (拓扑排序/dfs 判环)

    题意 https://vjudge.net/problem/CodeForces-1217D 请给一个有向图着色,使得没有一个环只有一个颜色,您需要最小化使用颜色的数量. 思路 因为是有向图,每个环两 ...

  9. Legal or Not(拓扑排序判环)

    http://acm.hdu.edu.cn/showproblem.php?pid=3342 Legal or Not Time Limit: 2000/1000 MS (Java/Others)   ...

  10. E. Andrew and Taxi(二分+拓扑判环)

    题目链接:http://codeforces.com/contest/1100/problem/E 题目大意:给你n和m,n代表有n个城市,m代表有m条边,然后m行输入三个数,起点,终点,花费.,每一 ...

随机推荐

  1. DIV CSS遮罩层(弹窗窗口)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. css - object-fit ie兼容

    css - object-fit ie兼容 参考资料 github 解决object-fit兼容IE浏览器实现图片自适应 demo <!-- * @createDate: 2022-08-30 ...

  3. 进程间通信-信号-pipe-fifo

    一.实验截图 (一)fifo (二)pipe (三)signal 二.实验代码 fifo //consumer #include <stdio.h> #include <stdlib ...

  4. 接口自动化-pycharm下查看日志文件中文乱码

      如图: 方法:pycharm 进入setting,找到File Encodings将编码全部设置gbk 现在室这样的:    修改为: 再次看日志:

  5. Mac 卸载 Anaconda3

    终端安装anaconda-clean conda install anaconda-clean 删除所有与 Anaconda 有关的文件与目录 anaconda-clean --yes 第 2 步中的 ...

  6. 分布式接口幂等性、分布式限流:Guava 、nginx和lua限流

    接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用. 举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此 ...

  7. mangodb查询语句

    1.查询所有记录 db.userInfo.find(); 相当于: select* from userInfo; 默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据.注意:键 ...

  8. MarkDown初次见面——

    Markdown基础语法 分级标题 n级标题就在前面加n个#即可,但是仅支持到六级标题. 字体 柔骨兔 字体倾斜:左右两边加1个* 柔骨兔 字体加粗:左右两边各自添加2个* 柔骨兔 倾斜加粗:左右两边 ...

  9. vue+element-ui+sortable.js实现表格行和列的拖拽

    项目碰到一个需求是需要表格字段列进行顺序拖拽,查过一些资料,中途也碰到了很多坑,实现方式如下: 封装成公用组件操作 //父组件 <template> <div> <com ...

  10. opencv对鱼眼图像畸变矫正

    import numpy as np ''' #T_cam_imu body_T_cam0: !!opencv-matrix rows: 4 cols: 4 dt: d data: [0.003489 ...