LCA 树上差分

本文介绍了两种树上差分的方法,包括对边权和对点权的差分操作,并探讨了在求解两点间最低公共祖先(LCA)时的应用。通过实例分析了如何在松鼠搬家和黑暗连锁问题中应用这些算法。
摘要由CSDN通过智能技术生成

两种方法,一种对边权加差分,一种对点加差分

松鼠的新家

对点加,两两点间求LCA,差分

int e[N],ne[N],h[N],idx;
void add(int a,int b)
{
   
	e[idx] = b , ne[idx] = h[a] , h[a] = idx ++;
}
int f[N][31],dep[N];
int n,a[N],d[N];
void bfs()
{
   
	memset(dep,0x3f,sizeof dep);
	dep[0] = 0 ,dep[1] = 1;
	queue<int> qu;
	qu.push(1);
	while(qu.size())
	{
   
		int t = qu.front();
		qu.pop();
		for(int i = h[t] ; ~i; i = ne[i])
		{
   
			int j = e[i];
			if(dep[j] > dep[t] + 1)
			{
   
				dep[j] = dep[t] + 1;
				qu.push(j);
				f[j][0] = t;
				for(int k = 1 ; k <= 30 ; k ++ )
					f[j][k] = f[f[j][k-1]][k-1];
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值