Description

傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来,更别说和别人打仗了。 在打仗之前,幽香现在面临一个非常基本的管理问题需要解决。 整个地图是一个树结构,一共有n块空地,这些空地被n-1条带权边连接起来,使得每两个点之间有一条唯一的路径将它们连接起来。在游戏中,幽香可能在空地上增加或者减少一些军队。同时,幽香可以在一个空地上放置一个补给站。 如果补给站在点u上,并且空地v上有dv个单位的军队,那么幽香每天就要花费dv×dist(u,v)的金钱来补给这些军队。由于幽香需要补给所有的军队,因此幽香总共就要花费为Sigma(Dv*dist(u,v),其中1<=V<=N)的代价。其中dist(u,v)表示u个v在树上的距离(唯一路径的权和)。 因为游戏的规定,幽香只能选择一个空地作为补给站。在游戏的过程中,幽香可能会在某些空地上制造一些军队,也可能会减少某些空地上的军队,进行了这样的操作以后,出于经济上的考虑,幽香往往可以移动他的补给站从而省一些钱。但是由于这个游戏的地图是在太大了,幽香无法轻易的进行最优的安排,你能帮帮她吗? 你可以假定一开始所有空地上都没有军队。

题解:

最近写动态点分治快自闭了QAQ.......

有时间再来写一下题解.

其实我不会告诉你我还没调出来呢QAQ

Code:

// luogu-judger-enable-o2
// luogu-judger-enable-o2
#include <bits/stdc++.h>
#define setIO(s) freopen(s".in","r",stdin) // ,freopen(s".out","w",stdout)
#define maxn 300000
#define N 300010
#define ll long long
#define inf 0x7f7f7f
using namespace std;
int n,m,cnt,sn,root;
int hd[N],to[N],nx[N],val[N];
void add(int u,int v,int c)
{
    nx[++cnt] = hd[u],hd[u] = cnt,to[cnt] = v,val[cnt] = c;
}
namespace heavyedge
{
    int fa[N],hson[N],siz[N],top[N],dep[N];
    ll dis[N];
    void dfs1(int u,int ff)
    {
        fa[u] = ff;
        for(int i = hd[u]; i ; i = nx[i])
        {
            if(to[i] == ff) continue;
            dep[to[i]] = dep[u] + 1,dis[to[i]] = dis[u] + val[i];
            dfs1(to[i],u);
            siz[u] += siz[to[i]];
            if(siz[to[i]] > siz[hson[u]]) hson[u] = to[i];
        }
    }
    void dfs2(int u,int tp)
    {
        top[u] = tp;
        if(hson[u]) dfs2(hson[u],tp);
        for(int i = hd[u]; i ; i = nx[i])
        {
            if(to[i] == hson[u] || to[i] == fa[u]) continue;
            dfs2(to[i],to[i]);
        }
    }
    int LCA(int a,int b)
    {
        while(top[a] != top[b]) dep[top[a]] < dep[top[b]] ? b = fa[top[b]]: a = fa[top[a]];
        return dep[a] < dep[b] ? a : b;
    }
    int main()
    {
        dfs1(1,0),dfs2(1,1);
        return 0;
    }
};
ll Dis(int a,int b)
{
    return heavyedge::dis[a] + heavyedge::dis[b] - (heavyedge::dis[heavyedge::LCA(a,b)] << 1);
}
int siz[N],vis[N],Fa[N],hto[N],f[N],tmp;
ll sumv[N],sumd[N];
void GetRoot(int u,int ff)
{
    siz[u] = 1,f[u] = 0;
    for(int i = hd[u]; i ; i = nx[i])
    {
        if(vis[to[i]] || to[i] == ff) continue;
        GetRoot(to[i],u);
        siz[u] += siz[to[i]];
        f[u] = max(f[u],siz[to[i]]);
    }
    f[u] = max(f[u],sn - siz[u]);
    if(f[root] > f[u]) root = u;
}
void dfs(int u)
{
    vis[u] = 1;
    for(int i = hd[u]; i ; i = nx[i])
    {
        if(vis[to[i]]) continue;
        root = 0, sn = siz[to[i]], GetRoot(to[i],u), hto[i] = root,Fa[root] = u, dfs(root);
    }
}
#define fax(i) (i + n)
void Update(int x,int w)
{
    sumv[x] += w;
    for(int i = x; Fa[i]; i = Fa[i])
    {
        ll dis = Dis(x, Fa[i]);
        sumv[Fa[i]] += w;
        sumd[Fa[i]] += 1ll*dis * w;
        sumd[fax(i)] += 1ll*dis * w;
    }
}
ll calc(int x)
{
    ll res = sumd[x];
    for(int i = x; Fa[i]; i = Fa[i])
    {
        ll dis = Dis(x, Fa[i]);
        res += 1ll*(sumv[Fa[i]] - sumv[i]) * dis;
        res += sumd[Fa[i]] - sumd[fax(i)];
    }
    return res;
}
ll Query(int u)
{
    ll tmp = calc(u);
    for(int i = hd[u]; i ; i = nx[i])
    {
        if(calc(to[i]) < tmp) return Query(to[i]);
    }
    return tmp;
}
int main()
{

    scanf("%d%d",&n,&m);
    for(int i = 1,a,b,c;i < n; ++i) scanf("%d%d%d",&a,&b,&c),add(a,b,c),add(b,a,c);
    heavyedge :: main();
    f[0] = inf, sn = n, root = 0, GetRoot(1,0),tmp = root,dfs(root), root = tmp;
    int u,e;
    while(m--)
    {
        scanf("%d%d",&u,&e),Update(u,e),printf("%lld\n",Query(root));
    }
    return 0;
}

  

ZJOI2015 幻想乡战略游戏 动态点分治_树链剖分_未调完的更多相关文章

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

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

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

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

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

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

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

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

  5. BZOJ 3924: [Zjoi2015]幻想乡战略游戏(动态点分治)

    这种动态点分治嘛,GDKOI时听打到了,也有同学讲到了,所以印象比较深刻也就想出来了,然后就在实现方面卡了好久= = 不得不说CLJ说得真的太简单了,实现方面根本没提. 首先我们可以先用树分治构建出这 ...

  6. BZOJ 3924 / Luogu P3345 [ZJOI2015]幻想乡战略游戏 (动态点分治/点分树)

    题意 树的结构不变,每个点有点权,每一条边有边权,有修改点权的操作,设xxx为树中一点.求∑idist(x,i)∗a[i]\sum_idist(x,i)*a[i]i∑​dist(x,i)∗a[i]的最 ...

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

    传送门 调了两个小时,终于过了-- 凭啥人家代码80行我180行啊!!! 谁叫你大括号换行 谁叫你写缺省源 思路 显然,补给点所在的位置就是这棵树的带权重心. 考虑size已知时如何找重心:一开始设答 ...

  8. bzoj 3924 [Zjoi2015]幻想乡战略游戏——动态点分治(暴力移动找重心)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3924 度数只有20,所以从一个点暴力枚举其出边,就能知道往哪个方向走. 知道方向之后直接走到 ...

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

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

随机推荐

  1. 线上MySQL慢查询现象案例--Impossible WHERE noticed after reading const tables

    前言:2012年的笔记整理而得,发布个人博客,做备忘录使用. 背景:线上慢查询日志监控,得到如下的语句:       发现:select doc_text from t_wiki_doc_text w ...

  2. 服务器监控(包括性能指标与web应用程序)

    http://blog.csdn.net/yao123long/article/details/53142029 http://blog.csdn.net/heyongluoyao8/article/ ...

  3. windows上开启winrm服务

    原文链接 因为进行远程powershell管理必须需要启用winrm的服务,所以需要在windows平台上启用winrm服务 winrm service 默认都是未启用的状态,先查看状态:如无返回信息 ...

  4. Cocos2d-x3.3beta0创建动画的3种方式

    1.单独载入精灵对象 渲染效率低,浪费资源,不推荐用该方法.代码例如以下:注:代码仅仅需贴到HelloWorldScene.cpp中就可以. //First,单独渲染每个精灵帧 auto sprite ...

  5. 利用“反射”动态加载R文件中的资源

    前几天做一个Android下面数据库相关的应用.用ListVIew展示表中数据的时候我希望能给表中每一条记录,加一个展示的图片.但是用数据库保存图片是比较难搞的.于是就把所需图片都保存到res下的dr ...

  6. Linux - Nginx配置反向代理。

    Nginx配置反向代理. 准备两台服务器 http://192.168.70.66 http://192.168.70.62 设置正则匹配(192.168.70.66) vim /usr/local/ ...

  7. win7 32位支持多大内存|win7 32位旗舰版最多能识别多少内存

    win7 32位支持多大内存|win7 32位旗舰版最多能识别多少内存 内存的大小决定系统运行速度,所以不少人认为只要内存加大就行了,其实这是不对的,因为win7 32位能支持的内存大小是有限制的,并 ...

  8. 国王的烦恼---nyoj

    国王的烦恼 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛.两个小岛间可能存在 ...

  9. php和nodejs

    整个故事正如好莱坞大片的经典剧情走向:两位昔日好友如今分道扬镳,甚至被迫陷入了你死我活的斗争当中.刚开始的分歧并不严重,无非是一位老友对于另一位伙伴长久以来占据.但又绝口不提的业务领域产生了点兴趣.而 ...

  10. Gym-101915A Printing Books 模拟

    题面 题意:给你N,X,   X表示这本书从X开始编号,每个X是几位数,计数器就加几, 然后问你如果从X,开始编号,计数器为N的时候,翻了几页,不能刚好为N输出-1. (例如,5 99,答案为2,因为 ...