随笔分类 - 点分治
摘要:点分治傻逼题。。。直接DP就行了
阅读全文
摘要:这道题还是非常简单的,由于我们要保证最小字典序,因此我们需要把边进行排序,然后从大到小插入,因为链式前向星是倒着存的。我们只需要先跑一个最短路,然后查询边是不是在最短路上,这个可以通过枚举边并用 dist[v]=dist[u]+edge[i]判断即可,如果是的话我们在这个边上打上标记。并进行一次DF
阅读全文
摘要:这道题非常巧妙!!! 我们进行点分治的时候,算出当前子节点的所有子树中的节点,到当前节点节点的儿子节点的距离,如下图意思就是 当前节点的红色节点,我们要求出红色节点的儿子节点绿色节点,所有绿色的子树节点的到当绿色的点权乘积 有如下的情况: 1*5*7 3*6*7 2*5*7 4*6*7 然后我们要想
阅读全文
摘要:这道题是求等于k的,和求<=k的基本上是如出一辙,需要注意的是,我们在把子树距离排序以后,在寻找距离等于K的数目的时候,也是用两个指针,进行扫描,如果蛮子满足q[l]+q[r]==k,我们需要检查是不是这两个q[l]和q[r]是同一个值,如果是的话,我们其实就是在l 到 r中选取两个,用一下组合公式
阅读全文
摘要:#include #include #include #include #define N 40005 #define M 80005 #define LL long long using namespace std; const int INF = 0x3f3f3f3f; int ver[M],edge[M],head[N],Next[M]; int n,m,tot,root;LL...
阅读全文

浙公网安备 33010602011771号