loj 2135 「ZJOI2015」幻想乡战略游戏 - 动态点分治
询问带权重心就在点分树上跑一下就行了。(枚举跳哪个子树更优)
剩下都是基础点分治。
学了一下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」幻想乡战略游戏 - 动态点分治的更多相关文章
- LOJ #2135. 「ZJOI2015」幻想乡战略游戏
#2135. 「ZJOI2015」幻想乡战略游戏 链接 分析: 动态点分治,求加权重心,带修改. 考虑如果知道了一个点s,如何求答案,那么首先可以点分治的思想,求每个联通块内所有点到分治中心距离和,然 ...
- LOJ #2135. 「ZJOI2015」幻想乡战略游戏(点分树)
题意 给你一颗 \(n\) 个点的树,每个点的度数不超过 \(20\) ,有 \(q\) 次修改点权的操作. 需要动态维护带权重心,也就是找到一个点 \(v\) 使得 \(\displaystyle ...
- LOJ2135 「ZJOI2015」幻想乡战略游戏
题意 题目描述 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来,更别说和 ...
- [ZJOI2015][bzoj3924] 幻想乡战略游戏 [动态点分治]
唉:-(动态点分治的思想真是复杂...... 先码住,再做几道题再来填坑 PS:接下来的Code因为用了倍增lca所以TLE一部分,但是懒得改成RMQ了...... Code: #include< ...
- [ZJOI2015]幻想乡战略游戏——动态点分治
[ZJOI2015]幻想乡战略游戏 带修改下,边点都带权的重心 随着变动的过程中,一些子树内的点经过会经过一些公共边.考虑能不能对这样的子树一起统计. 把树上贡献分块. 考虑点分治算法 不妨先把题目简 ...
- 【BZOJ3924】[Zjoi2015]幻想乡战略游戏 动态树分治
[BZOJ3924][Zjoi2015]幻想乡战略游戏 Description 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网 ...
- [BZOJ3924][ZJOI2015]幻想乡战略游戏(动态点分治)
题目描述 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来,更别说和别人打 ...
- P3345 [ZJOI2015]幻想乡战略游戏 动态点分治
\(\color{#0066ff}{ 题目描述 }\) 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越 ...
- 【bzoj3924】[Zjoi2015]幻想乡战略游戏 动态点分治
题目描述 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来,更别说和别人打 ...
随机推荐
- Python之np.random.permutation()函数的使用
官网的解释是:Randomly permute a sequence, or return a permuted range. 即随机排列序列,或返回随机范围.我的理解就是返回一个乱序的序列.下面通过 ...
- Window权限维持(九):端口监视器
后台打印程序服务负责管理Windows操作系统中的打印作业.与服务的交互通过打印后台处理程序API执行,该API包含一个函数(AddMonitor),可用于安装本地端口监视器并连接配置.数据和监视器文 ...
- Kafka学习笔记之Kafka Consumer设计解析
0x00 摘要 本文主要介绍了Kafka High Level Consumer,Consumer Group,Consumer Rebalance,Low Level Consumer实现的语义,以 ...
- webform的原生操作图片预览和上传
1.使用input标签进行图片操作,input的标签有一个accept属性,accept 属性只能与 <input type="file"> 配合使用.它规定能够通过文 ...
- [笔记] NuGet Warning NU5100 处理
问题描述 在将 .NET 项目编译成 NUGET 包时,如果项目引用了其它 dll 文件,则可能出现这个警告,如果不处理,Nuget 包中可能无法正确引用所添加的 dll . 处理方式 在项目 .cs ...
- JDK1.8新特性——Optional类
JDK1.8新特性——Optional类 摘要:本文主要学习了JDK1.8新增加的Optional类. 部分内容来自以下博客: https://www.cnblogs.com/1ning/p/9140 ...
- 电信NBIOT 2 - 数据上行(中间件获取电信消息通知)
电信NBIOT 1 - 数据上行(中国电信开发者平台对接流程) 电信NBIOT 2 - 数据上行(中间件获取电信消息通知) 电信NBIOT 3 - 数据下行 电信NBIOT 4 - NB73模块上行测 ...
- Vue实战狗尾草博客管理系统第二章
伙伴们出来啦,探讨各问题,关于项目中大量的表单,大家是怎么处理的? 本章主要内容如下:底层布局,路由配置,github仓库推送关联. 关联GitHub仓库 关联建立在github已创建账号的基础上 登 ...
- Oracle 11g 手工建库
假设数据库软件已经安装好,现在没有图形界面无法用dbca安装数据库,那么用手工建库,数据库名为edw 创建目录 [oracle@localhost ~]$ mkdir -p /u01/app/orac ...
- 一个简单servlet容器
一个简单servlet容器 2.1 javax.servlet.Servlet接口 Servlet编程需要使用javax.servlet和javax.servlet.http两个包下的接口和类 在所有 ...