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]幻想乡战略游戏 动态点分治
题目描述 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来,更别说和别人打 ...
随机推荐
- vuex 源码分析(一) 使用方法和代码结构
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,注意:使用前需要先加载vue文件才可以使用(在node.js下需要使用Vue.use(Vuex ...
- DGCNN
架构总览 模型的整体架构源于 WebQA 的参考论文 Dataset and Neural Recurrent Sequence Labeling Model for Open-Domain Fact ...
- 2019.10 搜索引擎最新排名,Elasticsearch遥遥领先
大数据的搜索平台已经成为了众多企业的标配,Elasticsearch.Splunk(商业上市公司).Solr(Apache开源项目)是其中最为优秀和流行的选择.在2019.10 最新搜索引擎排名中,E ...
- c++语法大全笔记(一)
目录 一:初级知识 c++是一种中级语言,是c的扩充,是一种面向对象的程序设计语言,可以运行到多个平台.这里直接讲语法. 基础c++模板: #include <iostream> ...
- Appium基于PO模型的自动化测试(Python)
基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...
- Python【day 14】sorted函数、filter函数和map函数的区别
sorted函数.filter函数和map函数的区别1.作用 前者用于排序, 中者用于筛选, 后者用于返回值(不是特定的筛选或者排序)2.写法 前者 sorted(iterable,key=自定义函数 ...
- spring cloud 框架源码 activiti工作流 vue.js html 跨域 前后分离 springboot
1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...
- memory一致性模型
https://homes.cs.washington.edu/~bornholt/post/memory-models.html https://www.cs.cmu.edu/afs/cs/acad ...
- 【原】通过Spring结合Cglib处理非接口代理
前言: 之前做的一个项目,虽然是查询ES,但内部有大量的逻辑计算,非常耗时,而且经常收到JVM峰值告警邮件.分析了一下基础数据每天凌晨更新一次,但查询和计算其实在第一次之后就可以写入缓存,这样后面直接 ...
- 数字,字符串,time模块,文本进度条
数字和字符串 数字类型 整形 整数, 1/2/3/12/2019 整形用来描述什么, 身高/年龄/体重 age = 18 height = 180 浮点型 浮点数,小数 salary = 10 pri ...