[NOIP模拟测试3] 建造游乐园 题解(欧拉图性质)
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] 建造游乐园 题解(欧拉图性质)的更多相关文章
- [NOIP模拟测试9]题(Problem) 题解 (组合数全家桶+dp)
达哥送分给我我都不要,感觉自己挺牛批. $type=0:$ 跟visit那题类似,枚举横向移动的步数直接推公式: $ans=\sum C_n^i \times C_i^{\frac{i}{2}} \t ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- NOIP模拟测试17&18
NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组
2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色
2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)
2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...
- NOIP模拟测试3「序列·熟练剖分·建造游乐园(play)」
---恢复内容开始--- 序列 刚调出来样例就A了,假装是水题. 因为是乱序,我们要求出来每两项之间最小公比,而不是直接比 求出来每两项之间最小公比,然后扫一遍就完了.(还要注意重复情况) 那么问题就 ...
- 「题解」NOIP模拟测试题解乱写I(29-31)
NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...
- NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」
建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...
随机推荐
- GPIO软件模拟IIC时序
一.MPU6050中的IIC时序 1.1 START和STOP SDA和SCL在高电平时,SDA拉低表示START.SCL拉低,表示可以传输数据. SDA和SCL在低电平时,SDA拉高表示STOP. ...
- PyCharm 默认快捷键
1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性)Ctrl + Alt + Space 快速导入任意类Ctrl + Shift + Enter 语句完 ...
- [CSP-S模拟测试ex]题解
爆零了.少特判见祖宗.还好这场不计入总分. 考场上什么都没想.感觉考试状态又回到了两个月前. A.Antipalindrome 手玩样例,不难发现题目中要求的合法串的充要条件是:对于任意$i \in ...
- 使用 nuxt+iview-admin+koa2 开发项目
公司最近在做的一个项目,依然是采用熟悉的vue开发,数据平台因为其数据量大的特点,采用传统的spa模式,首页加载时间很长,而SSR这种方式对于首屏的加载时间优化显而易见,同时还可以方便的进行SEO.因 ...
- 导入csv 到mysql数据库
1.查询导入数据存放位置 show variables like '%secure%'; +--------------------------+-----------------------+ | ...
- 在windows命令行下安装和使用babel(es6to5)
在自己的目录下新建一个babel-test/目录 进入这个目录 1. 安装babel命令和转换库: npm install babel-cli npm install babel- ...
- Android 发布自动版本号方案
以前看到一些自动化版本号打包的文章.如果您的项目是用 Git 管理的,并且恰巧又是使用 Gradle 编译(应该绝大部分都是这样的了吧?),本文试图找到一种更加优雅的自动版本管理方法. 背景 我们都知 ...
- .net Core 在 CentOS7下,报The type initializer for 'Gdip' threw an exception.异常
.net Core允许在 Centos7 上,使用 System.Draw.Common类库时,报以下错误: "Class":"System.TypeInitializa ...
- JavaScript实现10大算法可视化
参考博客: https://www.cnblogs.com/Unknw/p/6346681.html#4195503 十大经典算法 一张图概括: 名词解释: n:数据规模 k:“桶”的个数 In-pl ...
- activiti7启动流程实例,动态设置assignee人
package com.zcc.activiti03; import org.activiti.engine.ProcessEngine;import org.activiti.engine.Proc ...