题目传送门

  传送门

题目大意

  给定一棵树,初始点权都为0,要求支持:

  • 修改点权
  • 询问带权重心

  询问带权重心就在点分树上跑一下就行了。(枚举跳哪个子树更优)

  剩下都是基础点分治。

  学了一下11-dimensional的2.2k动态点分治,然后写抄出来只有1.9k???

Code

/**
* loj
* Problem#2135
* Accepted
* Time: 4492ms
* Memory: 28404k
*/
#include <bits/stdc++.h>
using namespace std;
typedef bool boolean; typedef class Edge {
public:
int ed, w, ctr; Edge() { }
Edge(int ed, int w) : ed(ed), w(w), ctr(-1) { }
} Edge; #define ll long long const int N = 1e5 + 5; int n, m;
boolean ban[N];
vector<Edge> G[N];
ll d[N][19], c[N], f[N];
int layer[N], faG[N], sz[N]; int get_sz(int p, int fa) { // calc size
sz[p] = 1;
for (auto& E : G[p])
sz[p] += ((E.ed == fa || ban[E.ed]) ? (0) : (get_sz(E.ed, p)));
return sz[p];
} int get_G(int p, int fa, int hs) {
for (auto& E : G[p]) {
if ((E.ed ^ fa) && !ban[E.ed] && sz[E.ed] > hs) {
return get_G(E.ed, p, hs);
}
}
return p;
} void prepare_dist(int p, int fa, int lay) {
for (auto& E : G[p]) {
if ((E.ed ^ fa) && !ban[E.ed]) {
d[E.ed][lay] = d[p][lay] + E.w;
prepare_dist(E.ed, p, lay);
}
}
} int dividing(int x, int _faG, int lay) {
int G = get_G(x, 0, get_sz(x, 0) >> 1);
faG[G] = _faG, ban[G] = true;
d[G][lay] = 0, layer[G] = lay;
prepare_dist(G, 0, lay);
for (auto& E : ::G[G]) {
if (!ban[E.ed]) {
E.ctr = dividing(E.ed, G, lay + 1);
}
}
return G;
} void update(int u, int v) {
for (int p = u ; p; p = faG[p]) {
f[p] += (d[u][layer[p]] - d[u][layer[p] - 1]) * v;
c[p] += v;
}
} ll calc(int u) {
ll ret = 0, lc = 0;
for (int p = u; p; lc = c[p], p = faG[p]) {
ret += f[p] + (c[p] - lc) * d[u][layer[p]];
}
return ret;
} ll solve(int u) {
ll ans = calc(u);
for (auto& E : G[u]) {
if (~E.ctr && calc(E.ed) < ans) {
return solve(E.ctr);
}
}
return ans;
} int main() {
scanf("%d%d", &n, &m);
for (int i = 1, u, v, w; i < n; i++) {
scanf("%d%d%d", &u, &v, &w);
G[u].emplace_back(v, w);
G[v].emplace_back(u, w);
}
int ctr = dividing(1, 0, 1), u, e;
while (m--) {
scanf("%d%d", &u, &e);
update(u, e);
printf("%lld\n", solve(ctr));
}
return 0;
}

loj 2135 「ZJOI2015」幻想乡战略游戏 - 动态点分治的更多相关文章

  1. LOJ #2135. 「ZJOI2015」幻想乡战略游戏

    #2135. 「ZJOI2015」幻想乡战略游戏 链接 分析: 动态点分治,求加权重心,带修改. 考虑如果知道了一个点s,如何求答案,那么首先可以点分治的思想,求每个联通块内所有点到分治中心距离和,然 ...

  2. LOJ #2135. 「ZJOI2015」幻想乡战略游戏(点分树)

    题意 给你一颗 \(n\) 个点的树,每个点的度数不超过 \(20\) ,有 \(q\) 次修改点权的操作. 需要动态维护带权重心,也就是找到一个点 \(v\) 使得 \(\displaystyle ...

  3. LOJ2135 「ZJOI2015」幻想乡战略游戏

    题意 题目描述 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来,更别说和 ...

  4. [ZJOI2015][bzoj3924] 幻想乡战略游戏 [动态点分治]

    唉:-(动态点分治的思想真是复杂...... 先码住,再做几道题再来填坑 PS:接下来的Code因为用了倍增lca所以TLE一部分,但是懒得改成RMQ了...... Code: #include< ...

  5. [ZJOI2015]幻想乡战略游戏——动态点分治

    [ZJOI2015]幻想乡战略游戏 带修改下,边点都带权的重心 随着变动的过程中,一些子树内的点经过会经过一些公共边.考虑能不能对这样的子树一起统计. 把树上贡献分块. 考虑点分治算法 不妨先把题目简 ...

  6. 【BZOJ3924】[Zjoi2015]幻想乡战略游戏 动态树分治

    [BZOJ3924][Zjoi2015]幻想乡战略游戏 Description 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网 ...

  7. [BZOJ3924][ZJOI2015]幻想乡战略游戏(动态点分治)

    题目描述 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来,更别说和别人打 ...

  8. P3345 [ZJOI2015]幻想乡战略游戏 动态点分治

    \(\color{#0066ff}{ 题目描述 }\) 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越 ...

  9. 【bzoj3924】[Zjoi2015]幻想乡战略游戏 动态点分治

    题目描述 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来,更别说和别人打 ...

随机推荐

  1. SAP MM模块相关透明表收集

    物料表 MCHA 批次表(批次.评估类型 工厂物料) MARA 查看物料数据(发票名称.创建时间.人员) MARC 物料数据查询(利润中心.状态.在途) MAKT 查看物料描述 MKPF 物料抬头 M ...

  2. IP 跟踪

    #coding=utf-8import sysimport os import re import urllibimport subprocess def getlocation(ip): resul ...

  3. maven 学习---使用Maven创建Web应用程序项目

    在本教程中,我们将演示如何使用 Maven 创建一个 Java Web 项目(Spring MVC). 用到的技术/工具: Maven 3.3.3 Eclipse 4.3 JDK 8 Spring 4 ...

  4. 完整且易读的微信小程序的注册页面(包含倒计时验证码、获取用户信息)

    目录 1.页面展示 2.wxml代码 3.wxss代码 4.js代码 1.页面展示 2.wxml代码 <!--pages/register/register.wxml--> <scr ...

  5. MQTT实战1 - 使用Apache Apollo代理服务器实现mqtt通信

    MQTT实战1 - 使用Apache Apollo代理服务器实现mqtt通信 MQTT实战2 - 使用MQTTnet实现mqtt通信 源码下载 -> 提取码  QQ:505645074 MQTT ...

  6. selenium和AutoIt工具辅助下载和上传

    上传 根据AutoIt Windows Info 所识别到的控件信息打开SciTE Script Editor编辑器,编写脚本. ;ControlFocus("title",&qu ...

  7. 代码审计-md5()函数

    <?php error_reporting(0); $flag = 'flag{test}'; if (isset($_GET['username']) and isset($_GET['pas ...

  8. C#基础表达式语句详解(下)

    书接上文: 4.选择语句:if语句和switch语句 4.1If语句:statement:两种格式:A与B A:If(boolean-expression)embedded-statement(嵌入式 ...

  9. 01-人脸识别-基于MTCNN,框选人脸区域-detect_face_main

    (本系列随笔持续更新) 搭建要求 详细的搭建过程在 参考资料1 中已经有啦. TensorFlow 1.6.0 OpenCV 2.4.8 仅仅是加载和读取图片的需要 Ubuntu 14.04 64bi ...

  10. python27期day06:小数据池、深浅拷贝、集合、作业题。

    0.pycharm是代码块.黑窗口是小数据池.如下图: 1.驻留机制(长得像的共用一个内存地址)分小数据池缓存机制:后期开发时能明确知道.为什么不能正常使用.把经常用的东西放入规则(黑窗口)里. 数字 ...