当前搜索:

[agc005c]Tree Restoring

前言简单题,数据范围可能是吓人的。题目大意给你每个点到最远点的距离,求是否存在这样的一颗树。简单一个性质是每个点的最远点一定是直径的端点。 然后我们找出直径长度,要求能构造出这条直径(每种距离都有2个点,当然直径中心只需要1个)。 然后其余点都可以直接接在直径上,因此到最远点的距离不能少于直径...
阅读(230) 评论(0)

[CodeM初赛A轮]D

题解用sqrt(a)/log a的时间分解质因数。 枚举一个质因数x,所有x的倍数节点打标记。 对于每一个被标记的联通块求直径。#include<cstdio> #include<algorithm> #include<map> #define fo(i,a...
阅读(350) 评论(3)

Walk

题目大意给定一颗边权树,对于任意i求出f[i]表示一条长度为i的简单路径gcd的最大值。瞎做我们可以把每条边挂在其的约数上,使用质因数分解。 对每个gcd做一下,对保留的所有边构出新树,然后对于所有这些边涉及到的点形成的每个联通块用两遍dfs求直径,最终得到森林的最长链。 设最长链为k,当前枚...
阅读(220) 评论(0)

挺进

题目大意给出一颗边权树,问你删除一条边然后将两部分直径相加的最大值为多少。DP我们知道求直径的dp方法: f1[x]表示x往下走的最长链,f2[x]表示x往下走不与f1路径相交的最长链。 一颗树的直径长度=∑ni=1f1[i]+f2[i]\sum_{i=1}^nf1[i]+f2[i] 其中f...
阅读(231) 评论(0)

[51nod 1766]树上的最远点对

题目大意给定一棵树,m个询问每次询问从a~b选一个结点并从c~d选一个结点使这两个结点距离最大。结论根据树的直径性质我们得到一个结论: 一个集合中的直径两端点一定被分成两个非空集合后两条直径的四个端点包含。 于是线段树维护。 注意你求lca不能倍增,应该用RMQ求。 RMQ求LCA的方法:...
阅读(821) 评论(0)
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 39万+
    积分: 1万+
    排名: 1455
    最新评论
    文章分类