[SDOI2017]切树游戏 (全局平衡二叉树维护动态DP)

基于变换合并的树上动态 DP 的链分治算法 & SDOI2017 切树游戏(cut)解题报告
切了一晚树心态崩了。
你问我怎么求异或逆卷积。
我,我。我???我!!!!!才不会说是把FWT后的数组每个求个逆元呢。。。。。。。
怎么模数为质数还有没有逆元的操作啊!!!!!

对于10007的倍数没有逆元的情况,标程的方法是维护非0部分的积和0的个数,这样就可减了
-Claris

不然就要打用数据结构维护轻儿子的( t o p − t r e e ? top-tree? toptree?)

AC Code:

#include<bits/stdc++.h>
#define maxn 30005
#define maxm 128
#define mod 10007
using namespace std;

int n,m;
int inv[mod]={
   1,1};
int w[maxn],v[maxn][maxm],cg0[maxn][maxm],g[maxn][maxm],gu[maxn][maxm],val[maxm][maxm],ls[maxn][maxm],rs[maxn][maxm],su[maxn][maxm],sum[maxn][maxm];
int info[maxn],Prev[maxn<<1],to[maxn<<1],cnt_e=0;
void Node(int u,int v){
    Prev[++cnt_e]=info[u],info[u]=cnt_e,to[cnt_e]=v; }
void FWT(int *a,int tp){
   
	static int c[2] = {
   (mod+1)/2,1};
	for(int L=2;L<=m;L<<=1)
		for(int l=L>>1,st=0;st<m;st+=L)
			for(int k=st;k<st+l;k++)
			{
   
				int x = a[k] , y = a[k+l];
				a[k] = (x + y) * c[tp==1] % mod , 
				a[k+l] = (x-y) * c[tp==1] % mod;
			}
}

int siz[maxn],son[maxn],fa[maxn],ch[maxn][2]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值