摘要: 【题意】 在最短路径树上,最长的包含K个点的简单路径长度为多长?长度为该最长长度的不同路径有多少条 【分析】 首先通过dij跑出最短路径,然后dfs一遍求出求最短路径树,注意到了每个点后,要把儿子节点按照标号排序 之后就是普通的点分治,开一个桶表示到重心经过的边数为i的最大长度以及方案数。每次要先更 阅读全文
posted @ 2021-05-17 22:52 andyc_03 阅读(60) 评论(0) 推荐(0)
摘要: 【题意】 求树上的一条路径,边权的平均值最接近k 【分析】 简单写一下式子,先要用分数规划二分答案 首先我们给所有的边权减去k,简化计算 我选择的方法是在每次分治的时候将所有的子树节点和自己加入按照边权和排序,然后分和大于0和小于0两部分计算,二分答案,>0/<0的有任意一个满足即可 【代码】 #i 阅读全文
posted @ 2021-05-17 21:09 andyc_03 阅读(35) 评论(0) 推荐(0)
摘要: 【题意】 求树上的权值和为k的路径包含最少边数 【分析】 仍然是比较明显的点分治 考虑记录一个l[i]表示权值为i的路径最少边数,得到一个子树的所有点到根的路径,更新答案即可 【代码】 #include<bits/stdc++.h> using namespace std; const int ma 阅读全文
posted @ 2021-05-17 15:13 andyc_03 阅读(36) 评论(0) 推荐(0)
摘要: 【题意】 求树上路径长度为3的倍数的路径数 【分析】 对于每个root,记录长度除以3余0/1/2的数量,计算答案即可 【代码】 #include<bits/stdc++.h> using namespace std; const int maxn=2e4+5; const int inf=0x3f 阅读全文
posted @ 2021-05-17 14:51 andyc_03 阅读(35) 评论(0) 推荐(0)
摘要: 【题意】 求树上长度小于等于k的路径条数 n≤105 【分析】 这是点分治的模板1,我们首先选择出当前处理的树的重心,然后从重心出发,每次计算经过当前这个节点的路径符合条件的有多少 这样统计的过程中,注意要减去不合法的部分,就是每个子树内距离小于等于k-(u->uson) 【代码】 #include 阅读全文
posted @ 2021-05-17 14:29 andyc_03 阅读(48) 评论(0) 推荐(0)