【JZOJ5870】地图

news/2024/11/30 14:33:09/

Description

给定N个度数为1或2的点,求所有带标号简单无向图(无重边和自环)的方案数。

Solution

设度数为2的点有 n n n个,度数为1的有 m m m个。
因为只有1和2,所以图一定是由许多链和大小大于等于3的简单环构成的,于是我们可以先将度数为1的点忽略(它们只能构成链的两端,一定是两两配对的)。
先考虑环,设 F i F_i Fi表示用 1 1 1~ i i i的点组成若干个环的方案数,考虑转移,枚举新加入环的大小,由于是带标号的,我们强制把 i i i放进新的环内,使得每个环具有区分性(可以理解为给每个环编号),避免算重。转移大概是这样: F i = ∑ j = 3 i 1 2 F i − j C i − 1 j − 1 ( j − 1 ) ! F_i=\sum_{j=3}^i\dfrac{1}{2}F_{i-j}C_{i-1}^{j-1}(j-1)! Fi=j=3i21FijCi1j1(j1)!
然后处理 G i G_i Gi,先设一个 g i , j g_{i,j} gi,j表示 i i i个点组成 j j j条链的方案数。转移易得为 g i , j = g i − 1 , j ⋅ ( i − 1 + j ) + g i − 1 , j − 1 g_{i,j}=g_{i-1,j}\cdot (i-1+j)+g_{i-1,j-1} gi,j=gi1,j(i1+j)+gi1,j1。最后考虑编号: G i = ∑ g i , j ⋅ P m / 2 j G_i=\sum g_{i,j}\cdot P_{m/2}^j Gi=gi,jPm/2j
最后求出 a n s = ( ∏ i = 1 m / 2 2 i − 1 ) ∑ i = 0 n F i ⋅ G n − i ans=(\prod_{i=1}^{m/2}2i-1)\sum_{i=0}^n F_i\cdot G_{n-i} ans=(i=1m/22i1)i=0nFiGni

Code

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define fo(i,j,k) for(int i=j;i<=k;++i)
#define fd(i,j,k) for(int i=j;i>=k;--i)
using namespace std;
typedef long long ll;
const int N=2e3+10,mo=998244353,n2=499122177;
int cn[N];
ll g[N][N],c[N][N];
ll F[N],G[N],jc[N];
int main()
{freopen("map.in","r",stdin);freopen("map.out","w",stdout);int n,o;scanf("%d",&n);fo(i,1,n) scanf("%d",&o),cn[o]++;if(cn[1]&1) return printf("0"),0;c[0][0]=jc[0]=1;fo(i,1,n){c[i][0]=1;fo(j,1,i) c[i][j]=(c[i-1][j]+c[i-1][j-1])%mo;jc[i]=jc[i-1]*i%mo;}F[0]=1;fo(i,3,cn[2])fo(j,3,i) F[i]=(F[i]+F[i-j]*c[i-1][j-1]%mo*jc[j-1]%mo*n2%mo)%mo;g[0][0]=1;fo(i,1,cn[2])fo(j,1,min(cn[1]/2,i)) g[i][j]=(g[i-1][j]*(i+j-1)%mo+g[i-1][j-1])%mo;G[0]=1;fo(i,1,cn[2])fo(j,1,cn[1]/2) G[i]=(G[i]+g[i][j]*c[cn[1]/2][j]%mo*jc[j]%mo)%mo;ll ans=0;fo(i,0,cn[2]) ans=(ans+c[cn[2]][i]*G[i]%mo*F[cn[2]-i]%mo)%mo;ll tmp=1;fo(i,2,cn[1]/2) tmp=tmp*(i+i-1)%mo;printf("%lld",ans*tmp%mo);
}

http://www.ppmy.cn/news/264151.html

相关文章

RDA5870调试

时间&#xff1a;20100506 现象&#xff1a;我司准备在MTK6253上换蓝牙芯片为RDA5870. 调试过程&#xff1a; 1、首先将RDA5870给的相关代码放到我们自己的工程中&#xff0c;编译通过。但是在添加的时候要注意用相关的宏名控制。 首先在工程文件中添加&#xff1a; RDA_BLUETO…

mysqldump 逻辑备份的正确姿势

在上一篇文章 MySQL 命令行工具之 mysqldump 深入研究 中&#xff0c;我们搞定了mysqldump的参数和基本原理。那么我们该怎么样最好的使用它的&#xff1f;它有哪些坑呢&#xff1f; 1. 利用mysqldump进行逻辑备份 1&#xff09;全逻辑备份&#xff1a; mysqldump -uxxx -p --f…

AMD OpenCL 大学课程

AMD OpenCL大学课程是非常好的入门级OpenCL教程&#xff0c;通过看教程中的PPT&#xff0c;我们能够很快的了解OpenCL机制以及编程方法。下载地址&#xff1a;http://developer.amd.com/zones/OpenCLZone/universities/Pages/default.aspx 教程中的英文很简单&#xff0c;我相信…

【Linux】软硬链接

文章目录 制作软硬链接&#xff0c;对比差别提出软硬链接的应用场景总结 制作软硬链接&#xff0c;对比差别 制作软链接 1.先创建一个文件&#xff0c;并向其中写入内容&#xff1a; 2.建立软链接&#xff1a;ln -s myfile.txt my-soft 可以发现&#xff0c;软链接是一个独…

tp703n怎么做无线打印服务器,TP-Link TL-WR703N无线路由器无线AP模式怎么设置

TP-Link TL-WR703N无线路由器配置简单&#xff0c;不过对于没有网络基础的用户来说&#xff0c;完成路由器的安装和无线AP模式的设置&#xff0c;仍然有一定的困难&#xff0c;本文学习啦小编主要介绍TP-Link TL-WR703N无线路由器无线AP模式的设置方法! TP-Link TL-WR703N无线路…

TP-Link 886nV6 刷第三方系统回忆

886nV6刷第三方系统 886n普遍只有8m的闪存&#xff0c;刷不了大的第三方系统。因为手头没有闪存就没换&#xff0c;OpenWRT成了优先级最高的系统。相关的刷机教程可去相关论坛查看。 本人在tb购买CH341A编程器使用sop8夹具&#xff0c;夹住flash的引脚进行烧录。 刷机坑的提醒…

tlwr842n服务器无响应,TL-WR842n无线路由器掉线解决方法汇总

《TL-WR842n无线路由器掉线解决方法汇总》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《TL-WR842n无线路由器掉线解决方法汇总(1页珍藏版)》请在人人文库网上搜索。 1、TL-WR842n无线路由器掉线解决方法汇总用单机接宽带能正常上网的这一台电脑有线连接路由器的LAN口…

tlwr886n发挥最大网速_路由器中的2.4G和5G有什么区别?用错了网速变“龟速”

虽然现在手机流量已经越来越便宜&#xff0c;但是在固定场所&#xff0c;人们还是习惯使用WiFi进行上网。尤其在下载大型文件的时候&#xff0c;WiFi更是必不可少。但是当我们设置或者连接路由器的时候&#xff0c;时常会看到2.4G和5G的信号。那么路由器中&#xff0c;2.4G和5G…