JZOJ 7066. 【2021.4.24 NOI模拟】ehzeux与圆周

题目大意

  • 圆周上有2∗n2*n2∗n个点,两两相连构成nnn个点对,其中有mmm个点对已经连好,求所有方案下的连通块数量和。当两个点相连或所在线段相交则称之为属于同一个连通块。
  • n,m≤300n,m\le300n,m≤300

题解

  • 需要发现一个性质,把圆周展开成一条线段后和原来是一样的,并不会影响线段的连通。
  • 考虑把每种情况的连通块数量总和,转化为每个连通块出现的次数总和。
  • 设fi,jf_{i,j}fi,j​为[i,j][i,j][i,j]为一个连通块时区间内不同连边的方案数,且[i,j][i,j][i,j]外连边的点有xxx个,则对答案的总贡献为fi,j∗x!2i2(i/2)!f_{i,j}*\frac{x!}{2^{\frac{i}{2}}(i/2)!}fi,j​∗22i​(i/2)!x!​,设后面的系数为gxg_xgx​,含义为把所有数全排列后相邻的两两连边,去掉每对顺序可以交换,且不同对之间顺序可以打乱的方案数。
  • 转移只需用一个区间内各种连边的总数减去不合法的方案数,即用当前区间内各种连边总方案减去[i,l](l∈(i,j))[i,l](l\in(i,j))[i,l](l∈(i,j))作为一个完整连通块的方案数。
  • 记得若[i,j][i,j][i,j]中有向外连的边,则fi,j=0f_{i,j}=0fi,j​=0。

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 310
#define ll long long
#define md 1000000007
struct {int x, y;
}a[N];
ll f[N * 2][N * 2], g[N * 2];
int si[N * 2], p[N * 2][N * 2];
int main() {int n, m, i, j, k, l;ll ans = 0;scanf("%d%d", &n, &m);n *= 2;for(i = 1; i <= m; i++) {scanf("%d%d", &a[i].x, &a[i].y);si[a[i].x] = si[a[i].y] = 1;p[a[i].x][a[i].y] = p[a[i].y][a[i].x] = 1;}for(i = 1; i <= n; i++) si[i] = si[i - 1] + (si[i] == 0);for(i = 0; i <= n; i++) if(i % 2 == 0) {g[i] = 1;int t = i / 2;for(j = i / 2 + 1; j <= i; j++) {g[i] = g[i] * j;while(t && g[i] % 2 == 0) g[i] /= 2, t--;g[i] %= md;}}for(k = 1; k <= n; k++) if(k % 2 == 0) {for(i = 1; i + k - 1 <= n; i++) {j = i + k - 1;f[i][j] = g[si[j] - si[i - 1]];for(l = i + 1; l < j; l++) {f[i][j] = (f[i][j] - f[i][l] * g[si[j] - si[l]] % md + md) % md;}for(l = 1; l <= m && f[i][j]; l++) {if((a[l].x >= i && a[l].x <= j) != (a[l].y >= i && a[l].y <= j)) f[i][j] = 0;}(ans += f[i][j] * g[si[i - 1] + si[n] - si[j]] % md) %= md;}}printf("%lld\n", ans);return 0;
}

JZOJ 7066. 【2021.4.24 NOI模拟】ehzeux与圆周(DP)相关推荐

  1. JZOJ 7036. 2021.03.30【2021省赛模拟】凌乱平衡树(平衡树单旋+权值线段树)

    JZOJ 7036. 2021.03.30[2021省赛模拟]凌乱平衡树 题目大意 给出两棵Treap,大小分别为 n , m n,m n,m,每个点的 p r i o r i t y priorit ...

  2. 2021年塔式起重机司机模拟考试题及塔式起重机司机作业考试题库

    2021年塔式起重机司机模拟考试题 题库来源:安全生产模拟考试一点通公众号小程序 2021年塔式起重机司机模拟考试题为正在备考塔式起重机司机操作证的学员准备的理论考试专题,每个月更新的塔式起重机司机作 ...

  3. 2021/4/24团队设计天梯赛L1题目集及题解

    2021/4/24团队设计天梯赛L1题目集及题解: 以下题解都是通过PTA测试的,大致保证正确性: 查看题目戳此::PTA题目集 L1题目集 L1-01 人与神(5分) L1-02 #两小时学完C语言 ...

  4. 2021年低压电工模拟试题及低压电工作业考试题库

    题库来源:安全生产模拟考试一点通公众号小程序 低压电工模拟试题参考答案及低压电工考试试题解析由安全生产模拟考试一点通题库老师及低压电工操作证已考过的学员汇总,相对有效帮助低压电工作业考试题库学员顺利通 ...

  5. 2021年高压电工模拟考试及高压电工模拟考试系统

    题库来源:安全生产模拟考试一点通公众号小程序 高压电工模拟考试是安全生产模拟考试一点通总题库中随机出的一套高压电工模拟考试系统,在公众号安全生产模拟考试一点通上点击高压电工作业手机同步练习.2021年 ...

  6. 2021年低压电工模拟考试题及低压电工复审模拟考试

    题库来源:安全生产模拟考试一点通公众号小程序 低压电工模拟考试题考前必练!安全生产模拟考试一点通每个月更新低压电工复审模拟考试题目及答案!多做几遍,其实通过低压电工考试试题很简单. 1.[判断题]导线 ...

  7. 2021年低压电工模拟考试题及低压电工理论考试

    题库来源:安全生产模拟考试一点通公众号小程序 低压电工模拟考试题是安全生产模拟考试一点通生成的,低压电工证模拟考试题库是根据低压电工最新版教材汇编出低压电工仿真模拟考试.2021年低压电工模拟考试题及 ...

  8. 2021年低压电工模拟考试题库及低压电工考试试题

    题库来源:安全生产模拟考试一点通公众号小程序 2021年低压电工模拟考试题库及低压电工考试试题,包含低压电工模拟考试题库答案和解析及低压电工考试试题练习.由安全生产模拟考试一点通公众号结合国家低压电工 ...

  9. 2021年低压电工模拟试题及低压电工模拟考试题库

    题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:2021年低压电工模拟试题为正在备考低压电工操作证的学员准备的理论考试专题,每个月更新的低压电工模拟考试题库祝您顺利通过低压电工考 ...

最新文章

  1. AI人必看!89页全网最全清华知识图谱报告(附PDF)
  2. [保护模式]非PAE模式
  3. 吴恩达 coursera ML 第十五课总结+作业答案
  4. python科学计算笔记(二)pandas获取网络文件
  5. VB:如何选定文件或文件夹
  6. NAU8810相关问题
  7. Java并发编程之线程定时器ScheduledThreadPoolExecutor解析
  8. python二多分支例题_Python分支语句练习题
  9. vue自定义插件-弹框
  10. 7-6 逆序的三位数 (10 分)
  11. 成功激活windows server 2008 sp2!
  12. synopsys软件介绍
  13. 两面看问题:区块链与伦理人权
  14. 2022年熔化焊接与热切割操作证考试题库及答案
  15. 微信怎样诞生:张小龙给马化腾的一封邮件
  16. android rn框架开发的例子,RN与安卓通信架构篇
  17. 股票的大底部形态,常见几种底部形态详解
  18. 离散数学 传递闭包 Warshall算法
  19. 爱德泰科普 | 单模光纤和多模光纤小知识
  20. html5免费文本教程,HTML5-文本元素

热门文章

  1. 设计模式-行为型-访问者模式
  2. SparkCore核心机制详解
  3. Jmeter参数化的四种方式
  4. 匈牙利命名法的衰落和建议
  5. VUE项目的e2e自动化测试超详细安装过程(保姆级)
  6. 共轭方式怎么判断_怎么判断共轭效应是吸电子共轭效应还是给电子共轭效应?吸电子基和给电子基是根据什么判断的?...
  7. VisualSVN Server 安装等
  8. transfrom用法
  9. 对于连接Excel时“外部表不是预期的格式”错误的处理
  10. android手机电视互动,安卓手机投屏酷开电视如何实现 多屏互动这么玩