【2015-2】day11 一道点分治的问题

来源:互联网 发布:电脑屏幕防蓝光软件 编辑:程序博客网 时间:2024/06/04 18:33



注:如果距离相同则去编号最小的


比较难想的点分治

预处理每个点最近超市dis[i]

与一般的点分治不同,由于要合并子树,函数大概要这样写(多半是蒟蒻见识少)

cal(int u)

   for each v (v is a son of u)

      cal(v)

   merge each v

考虑分治的根为rt时的情况

对于每一个儿子v所在子树讨论

对于x不属于v子树

x去v子树某一个点u仅当dis[x] < d[x] + d[u]

移项dis[x] - d[x] < d[u]

对v子树的d[u]排序,那么每个点都可以二分了,就这样计算贡献

遭了貌似复杂度不对= =忘了QAQ



0 0