hdu5279 YJC plays Minecraft
题解:
岛屿之间的边砍/不砍情况有$2^n$种,
但是需要剪掉所有的岛上都首尾相连的情况。
$dp$一下对于完全图没有限制($f$)/有限制($g$)的情况数。
方程:$$f[i]=\sum(C(i-1,j-1)*j^{(j-2)}*f[i-j])$$
$$g[i]=\sum(C(i-2,j-2)*j^{(j-2)}*f[i-j])$$
其中$j^(j-2)$是$j$个点的完全图的生成树个数。
打开组合数之后$CDQ$即可。
统计答案时$ans=2^n*\prod(f)-\prod(g)$。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MOD = ;
const int N = ;
typedef long long ll;
template<typename T>
inline void read(T&x)
{
T f = ,c = ;char ch = getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){c=c*+ch-'';ch=getchar();}
x = f * c;
}
ll fastpow(ll x,int y)
{
ll ret = ;
while(y)
{
if(y&)ret= ret*x%MOD;
x= x*x % MOD;
y>>=;
}
return ret;
}
int to[*N],lim=,L;
ll W[*N],inv;
void ntt(ll *a,int len,int k)
{
for(int i=;i<len;i++)
if(i<to[i])swap(a[i],a[to[i]]);
for(int i=;i<len;i<<=)
{
ll w0 = W[i];
for(int j=;j<len;j+=(i<<))
{
ll w = ;
for(int o=;o<i;o++,w=w*w0%MOD)
{
ll w1 = a[j+o],w2 = a[j+o+i]*w%MOD;
a[j+o] = (w1+w2)%MOD;
a[j+o+i] = (w1-w2+MOD)%MOD;
}
}
}
if(k==-)
{
for(int i=;i<(len>>);i++)swap(a[i],a[len-i]);
for(int i=;i<len;i++)a[i]=a[i]*inv%MOD;
}
}
ll a[*N],b[*N],c[*N],d[*N],e[*N];
ll f[N],g[N],fj[N],gj[N],jc[N],jn[N];
void clear()
{
for(int i=;i<lim;i++)a[i]=b[i]=;
}
void work()
{
ntt(a,lim,),ntt(b,lim,),ntt(c,lim,);
for(int i=;i<lim;i++)d[i]=a[i]*b[i]%MOD,e[i]=a[i]*c[i]%MOD;
ntt(d,lim,-),ntt(e,lim,-);
}
void cdq(int l,int r)
{
if(l==r)
{
if(l==)f[l] = ;
else f[l] = f[l]*jc[l-]%MOD;
if(l<=)g[l] = ;
else g[l] = g[l]*jc[l-]%MOD;
return ;
}
int mid = (l+r)>>;
cdq(l,mid);
lim = ,L = ;
while(lim<=(r-l+))lim<<=,L++;
for(int i=;i<lim;i++)to[i]=((to[i>>]>>)|((i&)<<(L-)));
inv = fastpow(lim,MOD-);
for(int i=;i<lim;i<<=)W[i]=fastpow(,(MOD-)/(i<<));
clear();
for(int i=;i<=mid-l;i++)a[i]=f[i+l]*jn[i+l]%MOD;
for(int i=;i<=r-l;i++)b[i]=fj[i],c[i]=gj[i];
work();
for(int i=mid-l+;i<=r-l;i++)f[i+l]=(f[i+l]+d[i])%MOD;
for(int i=mid-l+;i<=r-l;i++)g[i+l]=(g[i+l]+e[i])%MOD;
cdq(mid+,r);
}
int T,n,x;
int main()
{
jc[]=jn[]=;
fj[]=jc[]=jn[]=;
for(int i=;i<=;i++)
{
jc[i] = jc[i-] * i % MOD;
jn[i] = fastpow(jc[i],MOD-);
ll tmp = fastpow(i,i-);
fj[i] = tmp*jn[i-]%MOD;
gj[i] = tmp*jn[i-]%MOD;
}
cdq(,);
read(T);
while(T--)
{
read(n);
ll s1=,s2=;
for(int i=;i<=n;i++)
{
read(x);
s1 = s1 * f[x]%MOD;
s2 = s2 * g[x]%MOD;
}
s1 = s1*fastpow(,n)%MOD;
printf("%lld\n",(s1-s2+MOD)%MOD);
}
return ;
}
hdu5279 YJC plays Minecraft的更多相关文章
- hdu5279 YJC plays Minecraft 【分治NTT】
题目链接 hdu5279 题解 给出若干个完全图,然后完全图之间首尾相连并成环,要求删边使得两点之间路径数不超过\(1\),求方案数 容易想到各个完全图是独立的,每个完全图要删成一个森林,其实就是询问 ...
- HDU 5279 YJC plays Minecraft(NTT+分治)
题意 有 \(n\) 个岛屿,第 \(i\) 个岛屿上有一张 \(a_i\) 的完全图.其中第 \(i\) 张完全图的 \(a_i\) 号节点和 \(i+1\) 号岛屿的 \(1\) 号节点有边相连( ...
- HDU 5279 YJC plays Minecraft (分治NTT优化DP)
题目传送门 题目大意:有$n$个小岛,每个小岛上有$a_{i}$个城市,同一个小岛上的城市互相连接形成一个完全图,第$i$个小岛的第$a_{i}$个城市和第$i+1$个小岛的第$1$个城市连接,特别地 ...
- hdu 5279 YJC plays Minecraft——生成函数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5279 令 n 个点的树的 EGF 是 g(x) ,则 \( g(x) = \sum\limits_{i=0 ...
- 题解 HDU 5279 YJC plays Minecraft
题目传送门 题目大意 给出\(n\)以及\(a_{1,2,...,n}\),表示有\(n\)个完全图,第\(i\)个完全图大小为\(a_i\),这些完全图之间第\(i\)个完全图的点\(a_i\)与\ ...
- CDQ题目套路总结 [未完成]
CDQ学习资料 day1cdq分治相关 CDQ的IOI论文 1.优化斜率dp 左边对右边影响维护一个凸包解决 需要知识:①凸包②斜率dp 题目:√ HDU3842 Machine Works HY ...
- MineCraft note
客户端:http://pan.baidu.com/s/1hqgS8sshttp://pan.baidu.com/s/1mgmkduC 材质包:R3D小地图MODCraftGuide mod 内置合成表 ...
- Ubuntu上安装Minecraft服务器
Minecraft由于其独特的魅力吸引了很多玩家.不过游戏的乐趣只有在和朋友一起玩的时候才最有意思,所以很早以前我就想建设自己的服务器.但由于专业知识欠缺,没有实现. 最近接触了Linux服务器,所以 ...
- 纵观minecraft 游戏作者的世界观
minecraft 这款游戏 独特的游戏背景 与 模式 深受我爱 ,游戏的音乐制作方面也是独具一格 但是 整个游戏的风气 充满孤独的色彩 抑郁惆怅的音乐 每当在日出时 响起 ,当你进入生存模式之后 开 ...
随机推荐
- 《编译原理》-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法
<编译原理>-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法 此编译原理确定某高级程序设计语言编译原理,理论基础,学习笔记 本笔记是对教材< ...
- Angular 项目开发中父子组件传参
在项目开发中经常会遇到 组件之间传参的问题.今天总结下在使用angular的项目中父子组件传参的问题: 1.父组件向子组件传参: 然后在父组件中 然后在父组件的html中 然后就可以在子组件中使用了 ...
- HttpClient替换HttpWebRequest--以GET和POST请求为例说明
首先说一下HttpRequest.WebClient和HttpClient的关系:HttpRequest是基层的请求方式,WebClient是对HttpRequest的简化封装,在WebClient中 ...
- 通过split命令分割大文件
场景 线上出了问题,我需要去查找log来定位问题,但是由于线上数据量庞大,这些log文件每过一个小时就会自动回滚一次,尽管如此,有的log文件依然达到了五六g以上的大小. 对于这种巨大的log文件,常 ...
- [洛谷p2858] 奶牛零食
题目链接: 点我 题目分析: 这是什么,区间dp吗?怎么大佬都在说区间dp的样子 完蛋区间dp都不知道是啥quq 于是使用了玄学的姿势A过了这道题 设dp[i][j][0]表示第i天,左边选了j个,当 ...
- 【转】Android进程机制
以下资料摘录整理自老罗的Android之旅博客,是对老罗的博客关于Android底层原理的一个抽象的知识概括总结(如有错误欢迎指出)(侵删):http://blog.csdn.net/luosheng ...
- js的本质、全局属性
一.js的本质 1.js的本质就是处理数据, 数据来自于后台数据库, 所以变量就起到一个临时数据的作用 Ecmascript 制定了js的数据类型 2.数据类型有哪些? 字符串(string).数字( ...
- Delphi定时器控件TTimer“一睡不醒”问题研究
1,试验1—基础代码 1.1页面控件与代码 定时器 Timer1 Timer_work Interval 1000 1500 Enabled True True Ontimer事件 then exit ...
- [转]qt QTableWidget&&QTableView 导出数据到excel
转自http://blog.csdn.net/fairystepwgl/article/details/54576372 注意:由于在qt导出的过程中分为QTableWidget导出文件到excel和 ...
- COGS 1570. [POJ3461]乌力波
★☆ 输入文件:oulipo.in 输出文件:oulipo.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 法国作家乔治·佩雷克(Georges Perec,1 ...