发现每一块一定是按照一定的顺序的。

然后与标号无关,并且相同大小的对答案的影响相同。

然后列出递推式,上NTT+分治就可以了。

然后就可以与输入同阶处理答案了。

#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define mp make_pair
#define maxn (1<<18)
#define md 786433
#define g 10 int dp[maxn],fac[maxn],A[maxn],B[maxn],t,n,m,rev[maxn],C[maxn]; int ksm(int a,int b)
{
int ret=1;
for(;b;b>>=1,a=(ll)a*a%md)if(b&1)ret=(ll)ret*a%md;
return ret;
} void NTT(int * x,int n,int flag)
{
F(i,0,n-1) if (rev[i]>i) swap(x[rev[i]],x[i]);
for (int m=2;m<=n;m<<=1)
{
int mid=m>>1,wn=ksm(10,((md-1)/m*flag+md-1)%(md-1));
for (int i=0;i<n;i+=m)
{
int w=1;
for (int j=0;j<mid;++j)
{
int u=x[i+j],v=(ll)x[i+j+mid]*w%md;
x[i+j]=(u+v)%md;x[i+j+mid]=((u-v)%md+md)%md;
w=(ll)w*wn%md;
}
}
}
if (flag==-1)
{
int inv=ksm(n,md-2);
F(i,0,n-1) x[i]=(ll)x[i]*inv%md;
}
} void CDQ(int l,int r)
{
if(l==r)return;int mid=l+r>>1;CDQ(l,mid);
int n=mid-l+r-l,m=1;while((1<<m)<n)++m;n=(1<<m);
F(i,0,n-1)A[i]=B[i]=0;
F(i,l,mid)A[i-l]=dp[i];F(i,1,r-l) B[i-1]=fac[i];
F(i,1,n-1) rev[i]=(rev[i>>1]>>1)|((i&1)<<(m-1));
NTT(A,n,1);NTT(B,n,1);
F(i,0,n-1)C[i]=(ll)A[i]*B[i]%md;NTT(C,n,-1);
F(i,mid+1,r)dp[i]=((dp[i]-C[i-l-1])%md+md)%md;
CDQ(mid+1,r);
} int main()
{
fac[0]=1; F(i,1,100000) fac[i]=(ll)fac[i-1]*i%md;
dp[0]=0; F(i,1,100000) dp[i]=fac[i];
CDQ(1,100000);
scanf("%d",&t);
while(t--)
{
int ans=1,k,x;
scanf("%d%d",&n,&m);
F(i,1,m)
{
int mn=n+1,mx=-1;
scanf("%d",&k); ans=(ll)ans*dp[k]%md;
F(j,1,k) scanf("%d",&x),mn=min(mn,x),mx=max(mx,x);
if (k!=mx-mn+1) ans=0;
}
printf("%d\n",ans);
}
}

  

ZOJ 3874 Permutation Graph ——分治 NTT的更多相关文章

  1. ZOJ 3874 Permutation Graph 分治NTT

    Permutation Graph Time Limit: 2 Seconds      Memory Limit: 65536 KB Edward has a permutation {a1, a2 ...

  2. ZOJ 3874 Permutation Graph (分治NTT优化DP)

    题面:vjudge传送门 ZOJ传送门 题目大意:给你一个排列,如果两个数构成了逆序对,就在他们之间连一条无向边,这样很多数会构成一个联通块.现在给出联通块内点的编号,求所有可能的排列数 推来推去容易 ...

  3. ZOJ3874 Permutation Graph 【分治NTT】

    题目链接 ZOJ3874 题意简述: 在一个序列中,两点间如果有边,当且仅当两点为逆序对 给定一个序列的联通情况,求方案数对\(786433\)取模 题解 自己弄了一个晚上终于弄出来了 首先\(yy\ ...

  4. ZOJ3874 Permutation Graph

    Time Limit: 2 Seconds      Memory Limit: 65536 KB Edward has a permutation {a1, a2, … an}. He finds ...

  5. [gdoi2018 day1]小学生图论题【分治NTT】

    正题 题目大意 一张随机的\(n\)个点的竞赛图,给出它的\(m\)条相互无交简单路径,求这张竞赛图的期望强联通分量个数. \(1\leq n,m\leq 10^5\) 解题思路 先考虑\(m=0\) ...

  6. #565. 「LibreOJ Round #10」mathematican 的二进制(期望 + 分治NTT)

    题面 戳这里,题意简单易懂. 题解 首先我们发现,操作是可以不考虑顺序的,因为每次操作会加一个 \(1\) ,每次进位会减少一个 \(1\) ,我们就可以考虑最后 \(1\) 的个数(也就是最后的和) ...

  7. LOJ2541 PKUWC2018猎人杀(概率期望+容斥原理+生成函数+分治NTT)

    考虑容斥,枚举一个子集S在1号猎人之后死.显然这个概率是w1/(Σwi+w1) (i∈S).于是我们统计出各种子集和的系数即可,造出一堆形如(-xwi+1)的生成函数,分治NTT卷起来就可以了. #i ...

  8. 【BZOJ-3456】城市规划 CDQ分治 + NTT

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=3456 Solution 这个问题可以考虑dp,利用补集思想 N个点的简单图总数量为$2^{ ...

  9. CF960G Bandit Blues 【第一类斯特林数 + 分治NTT】

    题目链接 CF960G 题解 同FJOI2016只不过数据范围变大了 考虑如何预处理第一类斯特林数 性质 \[x^{\overline{n}} = \sum\limits_{i = 0}^{n}\be ...

随机推荐

  1. python_10_for guess

    age_of_oldboy=56 count=0 for count in range(3): guess_age=int(input('guess age:')) if guess_age==age ...

  2. Ribbon 负载均衡搭建

    本机IP为  192.168.1.102 1.   新建Maven  项目    ribbon 2.   pom.xml <project xmlns="http://maven.ap ...

  3. Python——函数入门(三)

    一.变量作用域 当程序定义一个变量时,这个变量是有它的作用范围的,变量的作用范围称为变量的作用域.根据变量的位置,分为两种: 局部变量:局部变量就是在函数中定义的变量,包括参数,都是局部变量,局部离开 ...

  4. 操作系统(4)_进程同步_李善平ppt

    生产者进程count++是它的临界区,消费者count--是它的临界区. 经典同步问题,死锁问题,略.

  5. Drop it-freecodecamp算法题目

    Drop it 1.要求 丢弃数组(arr)的元素,从左边开始,直到回调函数return true就停止. 第二个参数,func,是一个函数.用来测试数组的第一个元素,如果返回fasle,就从数组中抛 ...

  6. JavaScript两种创建标签的的方法,实现点击按钮让text自增

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 十二、MySQL 查询数据

    MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...

  8. 无线Web开发

    http://am-team.github.io/amg/dev-exp-doc.html

  9. 哦?原来Python 面试题是这样的,Python面试题No19

    本面试题题库,由公号:非本科程序员 整理发布 第1题:是否遇到过python的模块间循环引用的问题,如何避免它? 这是代码结构设计的问题,模块依赖和类依赖 如果老是觉得碰到循环引用可能的原因有几点: ...

  10. hihocoder#1098 : 最小生成树二·Kruscal算法

    #1098 : 最小生成树二·Kruscal算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 随着小Hi拥有城市数目的增加,在之间所使用的Prim算法已经无法继续使用 ...