首页 > 其他分享 >贡献法之求树上上任意两点间的路径之和

贡献法之求树上上任意两点间的路径之和

时间:2024-04-20 21:03:34浏览次数:14  
标签:idx int 路径 ++ depth 两点 法之求 dp dis

一图胜千言

image

开始造火箭

image

虽然我们可以求出,总共的dis(i,j),但分散到每一个小dis(i,j),由于存在向上取整操作,我们需要求出将每一个小dis(i,j)给补成k的倍数补数之和

此处我们采用树形dp。

dp[u][j]表示以u的子节点到根节点root的距离对k取余的值为j的点的个数

我们如何求树上任意两点的距离呢?

dis(a,b) = depth(a) + depth(b) - 2 * depth(lca(a,b))

那么,dis(a,b)的补数 **(k - dis(a,b)) % k **

上代码

#include<iostream>
#include<cstring>
#include<algorithm>
#define ll long long
const int N = 2e5 + 5; 
using namespace std;
int n,k;
int h[N],e[N * 2],ne[N * 2],idx;
ll dp[N][5],s[N];
ll ans;
void add(int a,int b)
{
	e[idx] = b;
	ne[idx] = h[a];
	h[a] = idx++;
}
void dfs(int u,int fa,int depth)
{
	dp[u][depth % k] = 1;s[u] = 1;
	for(int i = h[u];~i;i = ne[i])
	{
		int v = e[i];
		if(v == fa) continue;
		dfs(v,u,depth + 1);
		for(int j = 0;j < k;++j)
		{
			for(int r = 0;r < k;++r)
			{
				int dis = (j + r - 2 * depth) % k;
				int bushu = (k - dis) % k;
				ans += bushu * dp[u][j] * dp[v][r];
			}
		}
		s[u] += s[v];
		for(int j = 0;j < k;++j) dp[u][j] += dp[v][j];
		ans += (n - s[v]) * s[v];
	}
}
int main()
{
	cin >> n >> k;
	memset(h,-1,sizeof(h));
	for(int i = 1;i < n;++i)
	{
		int a,b;cin >> a >> b;
		add(a,b);add(b,a);
	}
	dfs(1,-1,0);
	cout << ans / k << '\n';
	return 0;
}

标签:idx,int,路径,++,depth,两点,法之求,dp,dis
From: https://www.cnblogs.com/gebeng/p/18148141

相关文章

  • 更改ollama模型存储路径
    默认情况下,ollama模型的存储目录如下:macOS:~/.ollama/modelsLinux:/usr/share/ollama/.ollama/modelsWindows:C:\Users\<username>\.ollama\models如果需要使用不同的目录,则需设置环境变量OLLAMA_MODELS,把它设置为所选目录。https://github.com/ollama/ollama/blob/ma......
  • Bingbong的回文路径
    Bingbong的回文路径题目描述Bingbong有一棵有根树,根节点为$1$,总共有$n$个节点。树中的节点通过$n−1$条无向边相连,每条边的权重为$1$。树中的每个节点包含一个小写字母。Bingbong将选择从节点$u$开始,并在选择最短路径的情况下到达节点$v$。他想知道他所走路径形成的......
  • blog.admin net8发布二级目录,及图片上传路径处理
    1、发布二级目录,修改以下配置,及对应的二级目录名跟配置的一致 2、图片上传a、修改后台api代码imgController.cspublicasyncTask<MessageModel<string>>InsertPicture([FromForm]UploadFileDtodto){if(dto.file==null||!dto.file.Any())returnFail......
  • NL2SQL技术方案系列(1):NL2API、NL2SQL技术路径选择;LLM选型与Prompt工程技巧,揭秘项目落
    NL2SQL技术方案系列(1):NL2API、NL2SQL技术路径选择;LLM选型与Prompt工程技巧,揭秘项目落地优化之道NL2SQL基础系列(1):业界顶尖排行榜、权威测评数据集及LLM大模型(SpidervsBIRD)全面对比优劣分析[Text2SQL、Text2DSL]NL2SQL基础系列(2):主流大模型与微调方法精选集,Text2SQL经典算法......
  • 小心启动路径带来的小坑
    最近在做一个需求,需要调用同级目录的第三方程序进行数据处理。快速的薅了一个实现Processprocess=newProcess();process.StartInfo=newProcessStartInfo(){};process.StartInfo.FileName="ProgramName.exe";process.StartInfo.CreateNoWindow=true;process.Star......
  • 用log4net写入不同路径的日志文件
      用log4net写入不同路径的日志文件///<summary>///根据_jobName路径写入不同日志///</summary>publicclassNLogger{privatestaticDictionary<string,ILog>Loggers=newDictionary<string,ILog>();privatestr......
  • VBS遍历文件或文件夹路径输入文件的所有绝对路径(附源码)
    <p>源码如下:</p>FunctionlistFilesPath(filepath)t1=Timer()Debug.WriteLine"****现在开始执行计数,用时:"+CStr(t1)Setfso=CreateObject("scripting.filesystemobject")Setmyfolder=fso.GetFolder(filepath)......
  • 2XC3 最短路径算法
    计算机科学:最终项目此项目将包括最终报告和您的代码。您的最终报告将包括以下内容。你会正在为此最终项目提交.py(NOT*.ipynb)文件。•标题页•目录•图表表•一份执行摘要,强调你的实验/分析的一些主要收获•向TA解释如何导航代码的附录。对于每个实验,在你的实验室报告中包括一个与......
  • MDT故障排除 未能找到路径: ****\x86\WinPE_OCs的一部分
    简介:memdocs/memdocs/configmgr/mdt/known-issues.md在main·MicrosoftDocs/memdocs(github.com)升级到适用于Windows11版本22H2的ADK后,尝试创建启动映像时,使用MDT创建启动映像向导失败,并出现以下错误:找不到路径“C:\ProgramFiles(x86)\WindowsKits\10\Assessment......
  • python路径相关操作:os.path
    Windows路径格式importos#当前python文件位置:T:\ProgrammingPractice\python_path\test.py#给定的路径path=r'D:\AAA\BBB\CCC\x.jpg'#path='D:\\AAA\\BBB\\CCC\\x.jpg'#获取路径的目录部分dir=os.path.dirname(path)#获取最后一个目录名last......