【Luogu4221】[WC2018] 州区划分

【LuoguP5383】[模板]普通多项式转下降幂多项式 传送门 Sol (怎么老是有人喜欢出新的多项式毒瘤板子,懒得整到一起了) 核心就是把 幂用下降幂来代替。 使用斯特林数展开幂为下降幂: xn=∑i=0n(xi)i!S(n,i)=∑i=0nS(n,i)xi‾x^n=\sum_{i=0}^n{x\choose i}i!S(n,i)=\sum_{i=0}^nS(n,i)x^{\underline i}xn=i=0∑n​(ix​)i!S(n,i)=i=0... 阅读详情

题目链接

题目描述

略

Sol

一个州合法就是州内点形成的子图中 不存在欧拉回路(一个点也算欧拉回路)。

这个东西显然就状压 dp 一下:
设 f [ S ] f[S] f[S] 表示当前考虑了 S S S 这个集合内所有点的所有方案满意度之和。
转移就枚举一个子集作为最后选出的一个州
f [ S ] = ( 1 s u m [ S ] ) p ∑ T ⊆ S f [ T ] ∗ g [ S − T ] f[S]=\bigg(\frac{1}{sum[S]}\bigg)^p\sum_{T\subseteq S}f[T]*g[S-T] f[S]=(sum[S]1​)pT⊆S∑​f[T]∗g[S−T]

s u m [ S ] sum[S] sum[S] 表示 S S S 内所有城市的人口之和
g [ S ] g[S] g[S] 表示 , 如果 S S S 是一个合法的州,那么 g [ S ] = s u m [ S ] p g[S]=sum[S]^p g[S]=sum[S]p , 否则 g [ S ] = 0 g[S]=0 g[S]=0

后面那个东西就是个子集卷积了,对于两个集合 U , V U,V U,V , 如果 U ∣ V = S U|V=S U∣V=S 且 U & V = 0 U\&V=0 U&V=0 那么就把他们的积贡献给 S S S 。

如果不需要满足集合无交的化就是一个或卷积 , 直接 F W T FWT FWT 。
但是这里要求无交。解决方法就是按照集合大小一个个来做。
因为 如果满足 U ∣ V = S U|V=S U∣V=S 且 ∣ U ∣ + ∣ V ∣ = ∣ S ∣ |U|+|V|=|S| ∣U∣+∣V∣=∣S∣ 的话 那么 U U U 和 V V V 就一定无交了,这样转化为大小限制就可以通过清空不合法状态来保证正确性。
每次做完一个大小后把数组中不是当前大小的状态的值清0就可以了。

code:

#include<bits/stdc++.h>
#define Set(a,b) memset(a,b,sizeof(a))
using namespace std;
const int N=22;
const int MAXN=1<<(N-1);
const int mod=998244353;
template <typename T> inline void init(T&x){
	x=0;char ch=getchar();bool t=0;
	for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') t=1;
	for(;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+(ch-48);
	if(t) x=-x;return;
}typedef long long ll;
template <typename T>inline void Inc(T&x,int y){x+=y;if(x>=mod) x-=mod;return;}
template <typename T>inline void Dec(T&x,int y){x-=y;if(x <  0) x+=mod;return;}
template <typename T>inline int fpow(int x,T k){int ret=1;for(;k;k>>=1,x=(ll)x*x%mod) if(k&1) ret=(ll)ret*x%mod;return ret;}
int Sum(int x,int y){x+=y;if(x>=mod) return x-mod;return x;}
int Dif(int x,int y){x-=y;if(x < 0 ) return x+mod;return x;}
int n,m,p;int Ful;
struct edge{
	int to,next;
}a[N*N];int cnt=0;
int head[N],sum[MAXN],Isum[MAXN],w[N],bits[N],number[MAXN];
inline void add(int x,int y){a[++cnt]=(edge){y,head[x]};head[x]=cnt;}
int deg[N];bool vis[N];int stk[N],top=0;
int fa[N];int f[22][MAXN],g[22][MAXN];
inline int find(int x){return fa[x]==x? x:fa[x]=find(fa[x]);}
inline void Merge(int x,int y){int fx=find(x),fy=find(y);if(fx==fy) return;fa[fx]=fy;}
namespace FST{
	inline void DFT(int*A,int n,int f){
		for(int i=1;i<n;i<<=1)
			for(int p=i<<1,j=0;j<n;j+=p)
				for(int k=0;k<i;++k)
					(~f)? Inc(A[i|j|k],A[j|k]):Dec(A[i|j|k],A[j|k]);
		return;
	}
}
int main()
{
	init(n),init(m),init(p);int u,v;
	for(int i=1;i<=m;++i) {init(u),init(v);add(u,v),add(v,u);}
	for(int i=1;i<=n;++i) init(w[i]);sum[0]=0;
	Ful=(1<<n)-1;bits[0]=1;for(int i=1;i<=n;++i) bits[i]=bits[i-1]<<1;
	for(int i=1;i<=n;++i) fa[i]=i;
	for(int i=1;i<=Ful;++i) {top=0;number[i]=number[i>>1]+(i&1);
		for(int j=1;j<=n;++j) if(i&bits[j-1]) stk[++top]=j,vis[j]=1,Inc(sum[i],w[j]);
		bool fl=0;sum[i]=fpow(sum[i],p);Isum[i]=fpow(sum[i],mod-2);
		for(int j=1;j<=top;++j) {
			int u=stk[j];
			for(int v,i=head[u];i;i=a[i].next) {v=a[i].to;if(!vis[v]) continue;Merge(u,v);++deg[u];}
			if(deg[u]&1) {fl=1;break;}
		}int rt=find(stk[1]);
		for(int j=2;j<=top;++j) if(find(stk[j])!=rt) {fl=1;break;}
		for(int j=1;j<=top;++j) {int u=stk[j];fa[u]=u,deg[u]=0,vis[u]=0;}
		if(!fl) continue;g[number[i]][i]=sum[i];
	}f[0][0]=1;
	for(int i=0;i<=n;++i) FST::DFT(g[i],bits[n],1);FST::DFT(f[0],bits[n],1);
	for(int i=1;i<=n;++i) {
		for(int j=0;j<i;++j) for(int s=0;s<=Ful;++s) Inc(f[i][s],(ll)f[j][s]*g[i-j][s]%mod);
		FST::DFT(f[i],bits[n],-1);// IDFT
		for(int s=0;s<=Ful;++s) {if(number[s]!=i) f[i][s]=0;else f[i][s]=(ll)f[i][s]*Isum[s]%mod;}
		if(i!=n) FST::DFT(f[i],bits[n],1);
	}
	cout<<f[n][Ful]<<endl;
	return 0;
}

多项式各种算法学习笔记 1.FFT(快速傅里叶变换) 1.前置技能 复数: 基本表示法及性质: i=−1i=\sqrt{-1}i=−1​ iii是虚数单位 1.坐标(代数)形式: z=a+biz=a+biz=a+bi 当b为0是z为实数,当a为0时为纯虚数 注:复数包括实数和虚数,虚数下有纯虚数 虚数z对应了复平面上的一点(a,b) 运算法则: 设复数z1,z2,z1=a+bi,z2=c+diz_1,z_2,z_1=a+... 阅读详情

相关推荐

【BZOJ1488】[HNOI2009]图的同构计数

题目链接 题意 求 n 个点的同构意义下不同的图的数量。(n≤60)(n\leq 60)(n≤60) Sol PolyaPolyaPolya 定理的练手题。 我们这里先把边的存在与否变成对边进行黑白染色,白色代表不存在,这样就变成了一个对完全图中的边进行染色的问题,于是可以使用 对BurnsideBurnsideBurnside引理 进行优化后的 PolyaPolyaPolya 定理。 显然总的置...

Yu Gi Oh! 737

luogu P4221 [WC2018]州区划分

luogu P4221 [WC2018]州区划分 题意 题意比较复杂,大致就是说把 给出n个点,m条边 把n个点分成若干组,使每组里面不存在欧拉回路 每种方案的满意度为所有州的满意度的乘积 求所有方案的满意度的和 大概就是这样 题解 首先要知道怎么判断欧拉回路 这题当一组的所有点的度数都为偶数时存在欧拉回路(因为要起点和终点相同) 如果图不联通也是合法的 然后就可以用子集DP解决 15’ 的问题 ...

lahlah的博客 345

【UOJ#450】[集训队作业2018] 复读机

题目链接 题目描述 群里有kkk个不同的复读机。为了庆祝平安夜的到来,在接下来的nnn秒内,它们每秒钟都会选出一位优秀的复读机进行复读。非常滑稽的是,一个复读机只有总共复读了ddd的倍数次才会感到快乐。问有多少种不同的安排方式使得所有的复读机都感到快乐。 Sol 发现 ddd 只有 333 , 很可能需要分开讨论。 d=1d=1d=1 就是 knk^nkn d=2d=2d=2: 其实容易发现这是一...

Yu Gi Oh! 646

Luogu4221 WC2018州区划分(状压dp+FWT)

  合法条件为所有划分出的子图均不存在欧拉回路或不连通,也即至少存在一个度数为奇数的点或不连通。显然可以对每个点集预处理是否合法,然后就不用管这个奇怪的条件了。   考虑状压dp。设f[S]为S集合所有划分方案的满意度之和,枚举子集转移,则有f[S]=Σg[S']*f[S^S']*(sum[S']/sum[S])p(S'⊆S),其中g[S]为S集合是否合法,sum[S]为S集合人口数之和。复杂...

weixin_30629977的博客 116

【BZOJ 4361】isn(dp计数+容斥)

题目链接 题目描述 给出一个长度为n的序列A(A1,A2…AN)。如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止。求有多少种不同的操作方案,答案模10^9+7。 Sol 初看这题觉得很神仙啊 , 看到那个非降后立即停止就感觉不好做 所以我们要想着我们要知道些什么东西才能让问题变得好做起来 难点有2: 1.求出能够使得非降的操作序列个数 2.满足这些操作序列的合法性 对于第一...

Yu Gi Oh! 610

射频功率放大器设计实战:从理论到Layout的全流程解析

本文以一款40W、960MHz LDMOS功率放大器为例,系统解析了从理论分析、仿真设计到版图实现的射频功率放大器设计全流程。内容涵盖AB类放大器选型、核心指标定义、稳定性分析、Load-Pull/源牵引仿真、史密斯圆图匹配、偏置网络设计,以及最终的谐波平衡仿真与版图电磁验证,为工程师提供了一套从理论到实践的完整设计方法论。

weixin_29266007的博客 248

状压+FMT--luoguP4221 [WC2018]州区划分

传送门 暴力是3n3^n3n枚举子集,f[S]=∑S′∈Sf[S′]×(sumS−S′sumS)pf[S]=\sum_{S&amp;#x27;\in S}f[S&amp;#x27;]\times (\frac{sum_{S-S&amp;#x27;}}{sum_S})^pf[S]=∑S′∈S​f[S′]×(sumS​sumS−S′​​)p 然后把这个东西分成f[i][S]f[i][S]f[i][S]...

继续学吧 364

ESP32编译卡在‘Cannot establish a connection to the component registry’?别急着重装,先试试这两个国内镜像配置

本文详细解析了ESP32编译过程中常见的‘Cannot establish a connection to the component registry’报错问题,并提供了国内镜像源的配置方案。通过对比Gitee、清华大学、阿里云和中科大等镜像源的性能,帮助开发者快速解决网络连接问题,提升编译效率。文章还包含手把手的配置教程和进阶技巧,适用于ESP-IDF开发环境的优化。

weixin_34088048的博客 341

NOI数学:莫比乌斯变换

P5491 【模板】二次剩余 【模板】二次剩余 - 洛谷 P1082 [NOIP2012 提高组] 同余方程 [NOIP2012 提高组] 同余方程 - 洛谷 【模板题】Luogu-P4717 快速莫比乌斯/沃尔什变换 (FMT/FWT) 【模板题】Luogu-P4717 快速莫比乌斯/沃尔什变换 (FMT/FWT)_hehepig的博客-优快云博客 状压+FMT--luoguP4221 [WC2018]州区划分 状压+FMT--luoguP4221 [WC2018]州区划分_继

青少年趣味编程 698

ChipCamp探索系列 -- 7A. 开源CPU之BOOM的来龙去脉

本文梳理一下Berkeley的乱序超标量CPU项目----Berkeley Out of Order Machine (BOOM),作为探索7系的首篇(7A)。

ChipCamp的博客---https://chipcamp.blog.youkuaiyun.com/ 1558

Revit获取族预览图

最近做到和族库相关的功能需要获取到族文件的预览图,在RevitAPI中提供了ElementType.GetPreviewImage方法,但是前提就是你是在Revit里面操作的,并且已经拿到了Symbol对象实例,才可以调用此方法。然后在网上找了另外一种方式,通过读取Revit文件,在REVITPREVIEW4.0字段截取文件信息,将其转换为图片格式。 一、使用RevitAPI中ElementType.GetPreviewImage方法 [Autodesk.Revit.Attributes.Transac.

weixin_44631419的博客 1749

常用数列总结&性质记录

P.S.:这里以1为第一项 1.∑ni=1Fi=Fn+2−11.∑i=1nFi=Fn+2−11.\sum^{n}_{i=1}F_{i}=F_{n+2}-1 2.∑ni=1F2i=Fn&amp;amp;amp;amp;nbsp;Fn+12.∑i=1nFi2=Fn&amp;amp;amp;amp;nbsp;Fn+12.\sum^{n}_{i=1}F_i^2=F_n\ F_{n+1} 3.∑ni=1i&amp;amp;amp;amp;nbsp;Fi=n&amp;a

Yu Gi Oh! 2009

深度学习batch、batch_size、epoch、iteration以及小样本中episode、support set、query set关系

训练整个数据集是epoch、把数据集分为多少小块就是batch,每个小块(batch)多少个数据就是batch_size,整个数据集需要训练多少轮是iteration

qq_42740834的博客 1610

【BZOJ 4671】异或图

题目链接 题目描述 定义两个结点数相同的图 G1 与图 G2 的异或为一个新的图 G, 其中如果 (u, v) 在 G1 与 G2 中的出现次数之和为 1, 那么边 (u, v) 在 G 中, 否则这条边不在 G 中. 现在给定 s 个结点数相同的图 G1…s, 设 S = {G1, G2, . . . , Gs}, 请问 S 有多少个子集的异 或为一个连通图? Sol 首先正难则反,考虑不连通 ...

Yu Gi Oh! 629

STP生成树/BPDU保护小实验

HCIA部分—STP生成树小实验 实验环境如图所示,要求: 1.在SW1上配置为根桥,使SW3的G0/0/1口作为根端口 2.在SW1的G0/0/3配置为边缘端口 3.若在SW1的G0/0/3口收到BPDU,能自动关闭该端口 4.通过配置bpdu保护,使端口能自动恢复up状态 首先,我们可以通过命令dis stp brief或者dis stp命令来得知SW1在生成树中的角色 确认SW1为非根交换机,此时可以通过修改stp优先级来让SW1成为根桥: 优先级数值缺省为32768,数值越小,优先级越高,数值

1mih的博客 5147

[STC32G144K246入门第一步]点亮LED

STC32G144K246是一款高性能32位8051单片机,集成了丰富外设资源,适用于工业控制和复杂算法处理。该芯片支持双模式内核,内置硬件加速器,提供246KB Flash和144KB SRAM存储空间。文章详细介绍了开发环境搭建步骤、寄存器配置方法,并给出了LED驱动示例代码,通过推挽输出控制P42口实现闪烁效果。虽然开发环境相比ARM存在不足,但通过合理配置仍可满足项目需求。该教程为开发者快速上手STC32G144K246提供了实用参考。

sinat_58149788的博客 795

【BZOJ 5019】[Snoi2017]遗失的答案

题目链接 题目描述 小皮球在计算出答案之后,买了一堆皮肤,他心里很开心,但是一不小心,就忘记自己买了哪些皮肤了。==|||万 幸的是,他还记得他把所有皮肤按照1~N来编号,他买来的那些皮肤的编号(他至少买了一款皮肤),最大公约数 是G,最小公倍数是L。现在,有Q组询问,每组询问输入一个数字X,请你告诉小皮球,有多少种合法的购买方案中 ,购买了皮肤X?因为答案太大了,所以你只需要输出答案mod100...

Yu Gi Oh! 601

【华为OD机试真题】65、高矮个子排队 | 机试真题+思路参考+代码解析 (C++、Java、Py、C语言、JS)

题目描述 >现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。 >  我们现在希望小朋友排队,以"高" "矮" "高" "矮" 顺序排列,每一个高位置的小朋友要比相邻的位置高或者相等;每个 "矮" 位置的小朋友要比相邻的位置矮或者相等; >  要求小朋友们移动的距离和最小,第一个从“高"位开始排,输出最小移动距离即可。 >  例如,在示范小队{5,3,1,2,3}中, {5, 1, 3, 2, 3}是排序结果。 > 

KJ.JK 2097

【BZOJ 4455】ZJOI2016小星星

题目链接 题意 给出一棵树和一张图,求出树和图的可能的映射个数,即保证当点映射完后,树是图的一颗生成树 (n&lt;=17) Sol 数据范围较小,于是我们想到了状态压缩 可以暴力映射,用树形Dp去转移 但是可能一个点被映射了多次,于是我们设dp[i][j][k]表示当前点i映射到了图上的点j,子树内映射的集合为k的方案数 然后这样的化每一棵子树内都要暴枚状态,会T掉 我...

Yu Gi Oh! 572

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【Luogu5293】[HNOI2019] 白兔之舞

题目链接 题目描述 略 Sol 考场上暴力 O(L)O(L)O(L) 50分真良心。 简单的推一下式子,对于一个 t 来说,答案就是: ∑i=0L[k∣(i−t)](Li)F(i)\sum_{i=0}^{L} [k|(i-t)] {L\choose i}F(i)i=0∑L​[k∣(i−t)](iL​)F(i) 就是对于所有 mod k 的结果是 t 的 i 的后面那一坨东西的和。 F(i)F(i...

Yu Gi Oh! 549

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【BZOJ3601】一个人的数论

题目链接 题意简述 求小于 n 且与 n 互质的数的 k 次方之和。 Sol 要求的东西: ∑i=1nik[gcd(i,n)=1]\sum_{i=1}^n i^k [gcd(i,n)=1]i=1∑n​ik[gcd(i,n)=1] 枚举 gcd 上个莫比乌斯函数: ∑i=1nik∑d∣n,d∣iμ(d)\sum_{i=1}^n i^k \sum_{d|n,d|i} \mu(d)i=1∑n​ikd∣n...

Yu Gi Oh! 404

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【BZOJ3684】大朋友和多叉树(拉格朗日反演)

题目链接 题意 求满足如下条件的多叉树个数: 1.每一个点的儿子个数在给定的集合 SSS 内 2.总的叶子节点树为 sss 儿子之间有顺序关系,但节点是没有标号的。 Sol 拉格朗日反演板子题。 (似乎不像是个反演) 拉格朗日反演: 用来求 复合逆。 如果两个多项式 F(x),G(x)F(x),G(x)F(x),G(x) 满足常数项均为 0,一次项均不为 0,并且 G(F(x))=xG(F(x)...

Yu Gi Oh! 399

【UOJ#394】[NOI2018] 冒泡排序

题目链接 题意 求有多少个字典序严格大于给定排列 qiq_iqi​ 的排列满足其逆序对数(冒泡排序需要交换的次数)达到下限 12∑i=1n∣i−pi∣\frac{1}{2}\sum_{i=1}^n |i-p_i|21​∑i=1n​∣i−pi​∣ Sol 很神仙的一题。 首先我们打表 (滑稽)。 发现当没有字典序限制时的答案就是卡特兰数。 考虑感性理解,那么考虑卡特兰数的经典应用,它是最长下降子序列...

Yu Gi Oh! 385
上一篇: 【牛客Wannafly挑战赛23】F 计数
下一篇: 巨型多项式板子集合...
NeosKnight
博客等级 码龄9年 21粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值