Orz 出题人石二队爷

我们可以先求出有n个点的联通欧拉图数量,然后使它删或增一条边得到我们要求的方案

也就是让它乘上$C_n^2$ (n个点里选2个点,要么删边要么连边,选择唯一)

那么接下来就是求有n个点的联通欧拉图数量$f[n]$

首先来看欧拉图的定义:

一张无向图为欧拉图,当且仅当无向图连通,并且每个点的度数都是偶数。

那么设共有n个点且所有点度数皆为偶数的方案数为$g[n]$

之后尝试计算出来它

先把一个点拿出来,剩$n-1$个点

从这$n-1$个点中选2个点,这两点之间可以连或不连边

那么如果最终某个点的度数不为偶,就用之前单拿出来的点向他连边

最后有一个问题:如果单拿出来的点度数不为偶呢?

显然不可能。每条边对总度数的贡献为2,所以无重边无自环的话一定满足要求

可得

$g_i=2^{C_{i-1}^2}$

接下来应当让$g$中的方案保证联通即为$f$

正如上场T3一样,考虑总-目标之外

枚举$j=1->i-1$ 得到$f_j$是一部分点满足欧拉图性质的方案数

则$g_{i-j}$是剩下点满足度数为偶的方案数

我们现在要构造除了所求之外的情况,所以从那i个点里拿出一个,从剩下的里面选$j-1$个点连边

$f_i=g_i-\sum \limits_{j=1}^{i-1}{f_j*g_{i-j}*C_{i-1}^{j-1}}$

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int mod=1e9+;
typedef long long ll;
int n;
ll qpow(ll a,ll b)
{
ll res=;
a%=mod;
while(b)
{
if(b&)res=(res*a)%mod;
a=(a*a)%mod;
b>>=;
}
return res%mod;
}
ll C[][],g[],f[];
int main()
{
scanf("%d",&n);
C[][]=;
for(int i=;i<=n;i++)
{
C[i][]=;
for(int j=;j<=n;j++)
C[i][j]=C[i-][j]+C[i-][j-],C[i][j]%=mod;
}
// while(1);
for(int i=;i<=n;i++)
g[i]=qpow(,C[i-][]);
for(int i=;i<=n;i++)
{
f[i]=g[i];
for(int j=;j<=i-;j++)
f[i]=(f[i]-f[j]*g[i-j]%mod*C[i-][j-]%mod+mod)%mod;
}
cout<<f[n]*C[n][]%mod<<endl;
return ;
}

[NOIP模拟测试3] 建造游乐园 题解(欧拉图性质)的更多相关文章

  1. [NOIP模拟测试9]题(Problem) 题解 (组合数全家桶+dp)

    达哥送分给我我都不要,感觉自己挺牛批. $type=0:$ 跟visit那题类似,枚举横向移动的步数直接推公式: $ans=\sum C_n^i \times C_i^{\frac{i}{2}} \t ...

  2. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  3. NOIP模拟测试17&18

    NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...

  4. 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组

    2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...

  5. 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色

    2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...

  6. 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)

    2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...

  7. NOIP模拟测试3「序列·熟练剖分·建造游乐园(play)」

    ---恢复内容开始--- 序列 刚调出来样例就A了,假装是水题. 因为是乱序,我们要求出来每两项之间最小公比,而不是直接比 求出来每两项之间最小公比,然后扫一遍就完了.(还要注意重复情况) 那么问题就 ...

  8. 「题解」NOIP模拟测试题解乱写I(29-31)

    NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...

  9. NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

    建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...

随机推荐

  1. 2019牛客多校第四场D-triples I 贪心

    D-triples 题意 给你一个\(n\),问至少有几个数或运算起来可以等于\(n\),并且输出数量和这个几个数.题目说明给的\(n\)一定符合条件(不会输出\(n= 1\) 之类不存在情况). 思 ...

  2. paper 140:TLD视觉跟踪算法(超棒)

    我是看了这样的一个视频:http://www.56.com/u83/v_NTk3Mzc1NTI.html 然后在准备针对TLD视觉跟踪算法来个小的总结. 以下博文转自:http://blog.csdn ...

  3. Django实现得步骤流程

    我们利用django实现功能得时候,步骤和流程是怎样得呢? 一,首先要在Models中创建表. 1,在setting中找到DATABASE 中找到要使用得数据库,用mysql就把名字改了mysql. ...

  4. python re模块常用的正则表达式

    '.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r&qu ...

  5. Python | 安装和配置智能提示插件Anaconda (转)

    作为Python开发环境的Sublime Text 3,有了Anaconda就会如虎添翼.Anaconda是目前最流行也是最有威力的Python代码提示插件. 工具/原料   Sublime Text ...

  6. web开发小知识

    session共享机制:f5刷新是再次提交之前的数据请求 地址栏回车属于不同的请求 不同浏览器获取不到之前数据 同一浏览器可以获取同步数据 session注销:session.invalidate() ...

  7. 哈希表(hash)详解

     哈希表结构讲解: 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度. ...

  8. Django框架(十八)—— CBV源码分析、restful规范、restframework框架

    目录 CBV源码分析.restful规范.restframework框架 一.CBV源码分析 1.url层的使用CBV 2.as_view方法 3.view方法 4.dispatch方法(可以在视图层 ...

  9. java 重新学习 (三)

    一.静态初始化块和声明静态成员变量时所指定的初始化值都是该类的初始化代码,他们的执行顺序与源程序中的排列顺序相同. static int a = 9 ; static{ a = 6; } public ...

  10. 基于MFC的Media Player播放器的制作(4---功能实现代码)

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. PandaPlayerDlg.h // PandaPlayerDlg.h : header file // //{{AFX_INCLUDE ...