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]幻想乡战略游戏 动态点分治
题目描述 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来,更别说和别人打 ...
随机推荐
- 一个动态构建 LambdaExpression Tree 的示例
直接贴代码了: public class ExpressionTreeBuildingSampleTwo : Sample { public override string Name { get; } ...
- Java使用路径通配符加载Resource与profiles配置使用
序言 Spring提供了一种强大的Ant模式通配符匹配,能从一个路径匹配一批资源. Ant路径通配符 Ant路径通配符支持“?”.“*”.“**”,注意通配符匹配不包括目录分隔符“/”: “?”:匹配 ...
- @Valid 数据校验 + 自定义全局异常信息
关于javax.validation.Validator校验的使用 对于要校验的实体类:其需要校验的字段上需要添加注解 实际例子 使用:首先要拿到 validator的子类 Validator val ...
- ASP.NET Core 3.0 使用AspectCore-Framework实现AOP
AspectCore是适用于Asp.Net Core 平台的轻量级Aop(Aspect-oriented programming)解决方案,它更好的遵循Asp.Net Core的模块化开发理念,使用A ...
- django中视图函数中装饰器
方法一 给指定方法加 from django.utils.decorators import method_decorator class xx(View): @method_decorator(装饰 ...
- Java生鲜电商平台-积分,优惠券,会员折扣,签到、预售、拼团、砍价、秒杀及抽奖等促销模块架构设计
Java生鲜电商平台-积分,优惠券,会员折扣,签到.预售.拼团.砍价.秒杀及抽奖等促销模块架构设计 说明:本标题列举了所有目前社会上常见的促销方案,目前贴出实际的业务运营手段以及架构设计,包括业务说明 ...
- DevExpress的TreeList的常用属性设置以及常用事件
场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...
- Linux下实现不活动用户登录超时后自动登出
方法一:通过修改.bashrc或.bash_profile文件来实现 通过修改home目录下的.bashrc或.bash_profile文件来实现.这两个文件选择其中一个在末尾加入如下一行,具体操作 ...
- Android四大组件:BroadcastReceiver 介绍
介绍 BroadcastReceiver 即广播组件,是 Android 的四大组件之一.用于监听和接收广播消息,并做出响应.有以下一些应用: 不同组件之间的通信(应用内或不同应用之间). 多线程之间 ...
- Mysql中的sql是如何执行的 --- 极客时间学习笔记
MySQL中的SQL是如何执行的 MySQL是典型的C/S架构,也就是Client/Server架构,服务器端程序使用的mysqld.整体的MySQL流程如下图所示: MySQL是有三层组成: 连接层 ...