2016多校联合第二场

1002
树上每个点都有一个点权w(w<=2^16),点数n<=2^16
已知dp方程:dp[i] = max{ dp[j] + w[i]^w[j], ancestor[i] = j}
将w分成前8位和后8位,设w[i]前8位和后8位为x和y,w[j]前8位和后8位为a和b,如图所示:
前8位 后8位
w[i]: x y
w[j]: a b
方程形式变为:
dp[i] = max{ dp[j] + (x^a)<<4 + (y^b), anscestor[i] = j }

维护ds[a][y] = max{ dp[j] + (y^b)},则dp[i] = max{ds[a][y] + (x^a)<<4 }
ds[a][y]的维护通过枚举y来实现;dp[i]的维护通过枚举a来实现
总复杂度:O(2^24)

1004
给定两个数组a和b,以及两种操作:
1)将a[l..r]同时变成一个数x
2)统计[l..r]中a[i]>=b[i]的数目
线段树:维护num[rt],结点rt的答案;cov[rt],节点rt被覆盖的数字大于等于该节点中数字的个数;c[dep][x]:线段树深度为dep时,第x小的数字;cl[dep][x]:线段树深度为dep时,第x小的数字在左儿子结点中不小于的数字个数;cr[dep][x]:线段树深度为dep时,第x小的数字在右儿子结点中不小于的数字个数

c数组归并排序的方式实现,cl和cr在c的基础上需要去重实现。
num和cov就是普通的线段树实现

1006
给定一张无向图,删除每个节点判断新的图的连通性。
先求出dfs搜索树,然后判断每个点是否为割点。如果不是割点,那么不改变连通性;如果是割点,那么判断该节点的儿子结点是否与“上层”结点连通。用tarjan算法即可实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值