CF762F Tree nesting 题解

CF762F

其实这个题也不是很复杂。

首先题目背景里说的是一个联通子图!!!

发现数据范围其实不是很大,我们不妨钦定一个节点为根 S S S 的节点。那么本质上对于 S S S 中的每一个节点我们都需要对 T T T 进行一次匹配。

显然因为是联通子图是不可能进行树哈希的,我们考虑进行树形 D p Dp Dp

不妨考虑设 f ( u , v , S ) f(u, v, S) f(u,v,S) 表示对于 u ∈ S , v ∈ T u \in S, v \in T uS,vT 的情况,已经匹配了 T T T 中集合 S S S 的方案数。

但是题目中说明的是无根树,如果再对于 T T T 钦定一个根的话会产生有些形态没有计算的情况。

所以我们不得不考虑重复计算的情况,也就是一个情况能计算几次。本质就是一个和 T T T 本质相同的树会被计算几次。

这两个相除即可。

#include <bits/stdc++.h>
using namespace std;

#define Fread
#define Getmod

#ifdef Fread
char buf[1 << 21], *iS, *iT;
#define gc() (iS == iT ? (iT = (iS = buf) + fread (buf, 1, 1 << 21, stdin), (iS == iT ? EOF : *iS ++)) : *iS ++)
#define getchar gc
#endif // Fread

template <typename T>
void r1(T &x) {
   
	x = 0;
	char c(getchar());
	int f(1);
	for(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值