【题解】牛客OI周赛1-提高组 B.树 树上倍增+组合计数

本文主要介绍了牛客OI周赛中提高组的一道题目B,涉及树上倍增和组合计数的算法应用。通过分析大佬的代码,理解了在选择子树端点时需避免同一子节点子树内部选点,以及处理子树外部端点时需扣除公共边的影响,以确保计算路径组合长度在范围内。尽管理解尚不深入,但时间紧迫,无法进一步研究。
摘要由CSDN通过智能技术生成

链接:https://www.nowcoder.com/acm/contest/199/B
来源:牛客网
在这里插入图片描述
在这里插入图片描述


学习了大佬代码。对着这份代码看了一个多小时好像有点点明白。大概就是在这头选两个端点在那头选两个端点更新答案(说了等于没说)。选子树内那一头是不能在同一个子节点的子树内部选两个(会多占一些边),选子树外那头也得把共了边的部分减去,保证最后往上跳之后求出来的路径组合长度是在范围内的。

#include<cstdio>
#include<cstring>
const int N=1e5+10,mod=1e9+7;
int hd[N],tot,n,sz[N],dep[N],fa[N][20],a[N],l,r,b[N],ans;
struct Edge{
	int v,nx;
}e[N<<1];
int C2(int x){return 1ll*x*(x-1)/2%mod;}//返回C(x,2) 
void add(int u,int v)
{
	e[tot].v=v;
	e[tot].nx=hd[u];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值