计数(count)
计数(count)
题目描述
既然是萌萌哒 visit_world 的比赛,那必然会有一道计数题啦!
考虑一个 NN个节点的二叉树,它的节点被标上了 1∼N1∼N 的编号. 并且,编号为 ii的节点在二叉树的前序遍历中恰好是第ii个出现.
我们定义AiAi 表示编号为ii的点在二叉树的中序遍历中出现的位置.
现在,给出MM个限制条件,第ii个限制条件给出了ui,viui,vi,表示Aui<AviAui<Avi ,也即中序遍历中uiui在vivi 之前出现.
你需要计算有多少种不同的带标号二叉树满足上述全部限制条件,答案对109+7109+7 取模.
输入
第一行一个整数 T(1≤T≤5)T(1≤T≤5), 表示数据组数.
每组数据第一行为两个整数 N,MN,M,意义如题目所述.
接下来 MM 行,每行两个整数ui,vi(1≤ui,vi≤N)ui,vi(1≤ui,vi≤N) . 描述一条限制.
输出
对每组数据,输出一行一个整数,表示答案.
样例输入
3
5 0
3 2
1 2
2 3
3 3
1 2
2 3
3 1
样例输出
1
提示
解释
第一组数据,无任何限制时,5 个点的二叉树形态个数为 4242 .
第二组数据,唯一满足条件的二叉树的形态为 1 - 2 - 3.(1 为根,2, 3 均为右儿子).
第三组数据,限制条件产生矛盾.
样例 2
见下发文件.
数据范围和子任务
对于全部的测试数据,保证 T≤5,N≤400,M≤103T≤5,N≤400,M≤103 .
子任务 1(20 分):M=0M=0 .
子任务 2(15 分):N≤10N≤10 .
子任务 3(20 分):N≤50,M≤1N≤50,M≤1 .
子任务 4(15 分):N≤50N≤50 .
子任务 5(30 分):无特殊限制.
来源
solution
20分是卡特兰数 然后我打崩了
令f[i][j]表示先序遍历序号为i~j的组成的树有多少种不同形态
那么 if(合法) f[i][j]=f[i+1][k]+f[k+1][j]
我们考虑怎么判断一个点是否合法
那么
1 [i+1,k]的任何一个点中序遍历都不能在[k+1,j] 以后
2 [i+1,k]的任何一个点中序遍历都不能在i以后
3 i的中序遍历都不能在[k+1,j] 以后
区间对区间可以用二维前缀和优化
效率O(n^3)
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 405
#define mod 1000000007
#define ll long long
using namespace std;
int T,n,m,t1,t2;
ll f[maxn][maxn],s[maxn][maxn],a[maxn][maxn];
void init(){
for(int i=0;i<=400;i++)
for(int j=0;j<=400;j++)f[i][j]=s[i][j]=a[i][j]=0;
}
int calc(int x,int y,int xx,int yy){
return s[xx][yy]-s[xx][y-1]-s[x-1][yy]+s[x-1][y-1];
}
bool pd(int ii,int xa,int xb,int ya,int yb){
if(calc(ya,xa,yb,xb))return 0;
if(calc(ya,ii,yb,ii))return 0;
if(calc(ii,xa,ii,xb))return 0;
return 1;
}
int main()
{
cin>>T;
while(T--){
init();
cin>>n>>m;
for(int i=1;i<=m;i++){
scanf("%d%d",&t1,&t2);
a[t1][t2]=1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)s[i][j]=a[i][j]+s[i-1][j]+s[i][j-1]-s[i-1][j-1];
}
for(int i=1;i<=n;i++)f[i][i]=1;
for(int l=1;l<=n;l++){
for(int i=1;i+l<=n;i++){
int j=i+l;
if(!calc(i,i+1,i,j))f[i][j]+=f[i+1][j];
if(!calc(i+1,i,j,i))f[i][j]+=f[i+1][j];
for(int k=i+1;k<j;k++){
if(pd(i,i+1,k,k+1,j)){
f[i][j]+=f[i+1][k]*f[k+1][j];
}
f[i][j]%=mod;
}
}
}
cout<<f[1][n]<<endl;
}
return 0;
}
计数(count)的更多相关文章
- 如何使用 GroupBy 计数-Count()
十年河东,十年河西,莫欺少年穷. 本节探讨的内容很简单,就是如果使用GroupBy计数 提供两种方法:第一:把查询的数据,转化为泛型,然后泛型分组计数. 第二:Linq语句直接分组计数 有如下范例: ...
- PHP切割字符用到的explode 以及计数count
在thinkphp中同样可以用 explode来进行字符的切割工作,比如 $jihe='1,2,3,4'; 在使用explode之后,可以获得一个数组: $array=explode(',',$jih ...
- STL_算法_元素计数(count、count_if)
C++ Primer 学习中.. . 简单记录下我的学习过程 (代码为主) count . count_if #include<iostream> #include<cstdio&g ...
- Table.RowCount行列计数…Count(Power Query 之 M 语言)
数据源: 任意五行两列 目标: 计算行数(包括空行) 操作过程: [转换]>[对行进行计数] M公式: = Table.RowCount( 表 ) 扩展: 对表中列进行计数:= Table.C ...
- sqlalchemy 获取计数 count
from sqlalchemy import func message_count = self.db.query(func.count(Message.uid)).filter(Message.ui ...
- 序列计数(count)
Portal -->broken qwq Description 给你一个长度为\(n\)的序列,序列中的每个数都是不超过\(m\)的正整数,求满足以下两个条件的序列数量: 1.序列中至 ...
- C++ 引用计数技术及智能指针的简单实现
一直以来都对智能指针一知半解,看C++Primer中也讲的不够清晰明白(大概是我功力不够吧).最近花了点时间认真看了智能指针,特地来写这篇文章. 1.智能指针是什么 简单来说,智能指针是一个类,它对普 ...
- sum()over()和count()over()分析函数
创建测试表 ),sales ),dest ),dept ),revenue number); 插入测试数据 ); ); ); ); ); ); ); commit; 查看表记录 SQL> sel ...
- select count(*) 底层究竟做了什么?
阅读本文大概需要 6.6 分钟. SELECT COUNT( * ) FROM t是个再常见不过的 SQL 需求了.在 MySQL 的使用规范中,我们一般使用事务引擎 InnoDB 作为(一般业务)表 ...
随机推荐
- eclipse部署web项目至本地的tomcat但在webapps中找不到问题
一.发现问题 在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并 ...
- JSTree下的模糊查询算法——树结构数据层次遍历和递归分治地深入应用
A表示区域节点,S表示站点结点 问题描述:现有jstree包含左图中的所有结点信息(包含区域结点和站点结点),需要做到输入站点名称模糊查询,显示查询子树结果如右图 解决策略: 1.先模糊查询所得站点所 ...
- git线上线下冲突
今天用git pull来更新代码,遇到了下面的问题: error: Your local changes to the following files would be overwritten by ...
- MSBuild常用方法
打包后把nuget包复制到指定的目录 <Target Name="CopyPackage" AfterTargets="Pack"> <Cop ...
- Nosql和RDBMS的比较及解释
概述 传统的关系型数据库以及数据仓库在面对大数据的处理时显得越来越力不从心.因为关系数据库管理系统 (RDBMS)的设计从未考虑过能够处理日益增长且格式多变的数据,以及访问数据并进行分析的用户需求呈爆 ...
- Cyclic Nacklace HDU - 3746 (kmp)
Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- C# datagridview列绑定类中类的属性
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://www.cnblogs.com/linghaoxinpian/p/5906374. ...
- easyui-combogrid匹配查询
用到easyui-combogrid,数据比较少的情况,可以一页就显示完毕,然后直接下拉选择.但是对于数据量比较大的情况,一页显示全部显然不合适,好在从easyui-combogrid的数据加载方式可 ...
- loj2058 「TJOI / HEOI2016」求和
推柿子 第二类斯特林数的容斥表达 fft卡精度就用ntt吧qwq. #include <iostream> #include <cstdio> using namespace ...
- luogu1829 [国家集训队]Crash的数字表格
被 bs 了姿势水平--好好学习数学QAQQAQQAQ ref #include <iostream> #include <cstring> #include <cstd ...