简单无向图

题目

Description

Input

Output

Sample Input

输入1:

4

2 1 1 2

输入2:

10

2 2 2 2 1 1 2 1 1 2

Sample Output

输出1:

2

输出2:

18012

Data Constraint

题解

题目大意

给出\(n\)个点和每个的度数

问有多少合法的简单无向图

分析

手模之后发现,每个联通块要么是链,要么是环

而链的个数是\(\dfrac{t1}{2}\)(\(t1\)表示1的个数,\(t2\)表示2的个数,下同)

然后打表找规律

发现只跟1的方案数

\(w[i]=w[i-2]+w[i-4]*(i-2)*(i-3)\)

那么现在就可以只考虑2了

设\(f[i][j]\)表示当前用了\(i\)个2,其中\(j\)个用作环,那么剩下\(i-j\)个就是用作链

对于当前这一个

有3种情况

  1. 新环。\(f[i][j]+=f[i-3][j-3]*(i-1)*(i-2)/2\)
  2. 进到一个环里。\(f[i][j]+=f[i-1][j-1]*(j-1)\)
  3. 进到一个链里。\(f[i][j]+=f[i-1][j]*(i-j-1+t1)\)

解释

  • 要加入一个新的环,需要3个点。去掉当前这个点,还需要在i-1里选两个点,即\(C_{i-1}^2\),就是\((i-1)*(i-2)/2\)
  • 进到一个环里,现在一个环里有\(j-1\)个位置,那么这个点可以选任意一个位置来访
  • 进到一个链是一样的,总共有\(i-j-1+t1\)个位置可以放

注意一下爆\(int\)的问题

答案就是\(w[t1]*\sum_{i=0}^{t2}f[t2][i]\)

总结

这题的状态需要想一下

式子有点难推

需要提高对设状态的熟练度

Code

#include<bits/stdc++.h>
#define mod 998244353
using namespace std;
long long n,x,t1,t2,ans,sum,one[2005],f[2005][2005];
int read()
{
int res=0;char ch=getchar();
while (ch<'0'||ch>'9') ch=getchar();
while (ch>='0'&&ch<='9') res=(res<<1)+(res<<3)+(ch-'0'),ch=getchar();
return res;
}
int main()
{
freopen("graph.in","r",stdin);
freopen("graph.out","w",stdout);
n=read();
for (int i=1;i<=n;++i)
{
x=read();
if (x==1) ++t1;
else ++t2;
}
one[0]=1;
for (int i=2;i<=t1;++i)
one[i]=(one[i-2]+(long long)one[i-4]*(i-3)*(i-2)%mod)%mod;
ans=one[t1]%mod;
t1/=2;
f[0][0]=1;
for (long long i=1;i<=t2;++i)
for (long long j=0;j<=i;++j)
{
if (t1) f[i][j]=(long long)f[i-1][j]*(i-j-1+t1)%mod;
if (j>2) f[i][j]=(f[i][j]+(long long)(f[i-3][j-3]*(i-1)*(i-2)/2%mod))%mod;
if (j) f[i][j]=(f[i][j]+(long long)f[i-1][j-1]*(j-1)%mod)%mod;
}
for (int i=0;i<=t2;++i)
sum=(sum+f[t2][i])%mod;
printf("%lld\n",ans*sum%mod);
fclose(stdin);
fclose(stdout);
return 0;
}

JZOJ 2020.10.6 【NOIP2017提高A组模拟9.7】简单无向图的更多相关文章

  1. JZOJ 【NOIP2017提高A组模拟9.14】捕老鼠

    JZOJ [NOIP2017提高A组模拟9.14]捕老鼠 题目 Description 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠.于是,猫被农夫约派去捕 ...

  2. JZOJ 5328. 【NOIP2017提高A组模拟8.22】世界线

    5328. [NOIP2017提高A组模拟8.22]世界线 (File IO): input:worldline.in output:worldline.out Time Limits: 1500 m ...

  3. JZOJ 5305. 【NOIP2017提高A组模拟8.18】C (Standard IO)

    5305. [NOIP2017提高A组模拟8.18]C (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Description ...

  4. 【NOIP2017提高A组模拟9.7】JZOJ 计数题

    [NOIP2017提高A组模拟9.7]JZOJ 计数题 题目 Description Input Output Sample Input 5 2 2 3 4 5 Sample Output 8 6 D ...

  5. JZOJ 100029. 【NOIP2017提高A组模拟7.8】陪审团

    100029. [NOIP2017提高A组模拟7.8]陪审团 Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limits   Got ...

  6. JZOJ 5329. 【NOIP2017提高A组模拟8.22】时间机器

    5329. [NOIP2017提高A组模拟8.22]时间机器 (File IO): input:machine.in output:machine.out Time Limits: 2000 ms M ...

  7. JZOJ 5307. 【NOIP2017提高A组模拟8.18】偷窃 (Standard IO)

    5307. [NOIP2017提高A组模拟8.18]偷窃 (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Description ...

  8. JZOJ 5286. 【NOIP2017提高A组模拟8.16】花花的森林 (Standard IO)

    5286. [NOIP2017提高A组模拟8.16]花花的森林 (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Descript ...

  9. 【NOIP2017提高A组模拟9.17】猫

    [NOIP2017提高A组模拟9.17]猫 题目 Description 信息组最近猫成灾了! 隔壁物理组也拿猫没办法. 信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数) ...

  10. 【NOIP2017提高A组模拟9.17】组合数问题

    [NOIP2017提高A组模拟9.17]组合数问题 题目 Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数. 举个例子,将{1,2,3}拆分成2 个 ...

随机推荐

  1. PHP date_formate使用相关

    $date=date_create("2016-09-25"); echo date_format($date,"Y/m/d H:i:s");要使用date_f ...

  2. malloc,calloc,realloc三者的区别

    malloc,calloc,realloc三者都可以运用与动态分配数组. malloc:用malloc必须要自己初始化,可以用memset(arr,0,cnt*sizeof(int)) calloc: ...

  3. 深入学习OpenCV文档扫描及OCR识别(文档扫描,图像矫正,透视变换,OCR识别)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 下面 ...

  4. 【转载】Apriori

    通过这个博客学习:数据挖掘十大算法(四):Apriori(关联分析算法) 代码也是摘自上面博客,对照代码理解理论部分可能更加有助于对该算法的理解 from numpy import * # 构造数据 ...

  5. 搞微服务用阿里开源的 Nacos 真香啊!

    本文适合有 Java 基础知识的人群 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列,今天给大家带来一款开源 Java 版可以实现动态服务发现, ...

  6. layui table表格详解

    上次做table有些东西 忘记了 这次当作来个分析总结一下  跟大家共同学习 闲话不多说 直接上例子   代码: <form id="form1" runat="s ...

  7. MySQL中EXPLAIN结果的参数详解

    explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了.如: mysql& ...

  8. ceph写osd的配置文件/etc/ceph/ceph.conf

    ceph在部署过程中是先进行部署,再去写配置文件的,而一些新手在部署完了后,并没有写配置文件,在重启服务器后,因为挂载点没有挂载,所以服务无法启动,所以需要写好配置文件 还有一种情况是集群有几百个os ...

  9. Python _PyQt5 【总】

    http://www.cnblogs.com/archisama/p/5442071.html QtCore QtGui QtWidgets QtMultimedia QtBluetooth QtNe ...

  10. phpmyadmin反序列化漏洞(WooYun-2016-199433)

    简介 环境复现:https://github.com/vulhub/vulhub 线上平台:榆林学院内可使用协会内部的网络安全实验平台 phpMyAdmin是一套开源的.基于Web的MySQL数据库管 ...