P3345 ZJOI2015 幻想鄉戰略遊戲

2022-05-19 11:45:10 字數 2413 閱讀 4479

傳送門

考慮先隨便找乙個點作為根,然後再慢慢移動根,這樣一步步走到最優的點

設 $sum[x]$ 表示節點 $x$ 的子樹的軍隊數,$len(x,y)$ 表示 $x,y$ 之間邊的長度

那麼對於根節點 $x$ 的乙個兒子 $v$,考慮把兒子搞為根時,代價的改變量

$v$ 的子樹內的軍隊消耗減少,共減少了 $sum[v]\cdot len(x,v)$ 

$v$ 的子樹外的軍隊消耗增加,即根節點 $x$ 的子樹內除了 $v$ 子樹的軍隊消耗增加

代價增加了 $(sum[x]-sum[v])\cdot len(x,y)$

如果兒子比父親優,那麼整理可得 $2sum[v]>sum[x]$,顯然滿足條件的 $v$ 只有乙個

此時如果沒有滿足的 $v$ ,那麼 $x$ 就是最優點,否則最優點在$x$的子樹內

如果每次都乙個乙個兒子跳下去,顯然會gg

但是因為最優點在子樹內所以可以考慮在點分樹上跳

我們需要維護兩個東西 : $s[x],sf[x]$,分別表示節點 $x$的點分樹子樹到 $x$ 的總代價,節點 $x$ 的點分樹子樹到 $x$ 在點分樹父親$fa[x]$ 的總代價

那麼計算乙個節點 $x$ 的總消耗就考慮一直往 $fa$ 跳,每次跳完就考慮這一段產生的代價

設當前跳到了節點 $now$

那麼十分顯然 $fa[now]$ 的點分樹子樹 不包括 $now$ 的點分樹子樹 的部分新產生的代價為 $s[fa[now]]-sf[now]+(sum[fa[now]]-sum[now])\cdot dis(fa[now],x)$

($dis(x,y)$表示節點 $x,y$ 在原樹上的距離,注意此時 $sum[x]$ 表示節點 $x$ 的點分樹子樹軍隊總數)

我們可以用 rmq 求 lca 來 $o(1)$ 求出兩點間的距離

至於修改操作也在點分樹上直接維護就好了

注意$long long$,**有注釋

#include#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;inline

intread()

while(ch>='

0'&&ch<='

9')

return x*f;

}const

int n=2e5+7,inf=1e9+7

;int fir[n],from

[n],to[n],val[n],cntt;

inline

void add(int &a,int &b,int &c)

intn,m,tot,rt;

intsz[n],mx[n],fa[n];

vector

v[n],g[n];//

存點分樹

bool

vis[n];

void find_rt(int x,int

fa) mx[x]=max(mx[x],tot-sz[x]);

if(mx[x]x;

}void build(int x)//

建點分樹

}int st[n],dfn[n],pos[n],dis[n],top,dfs_clock,f[n][21],log[n];//

維護rmq求lca維護dis

void dfs(int x,int

fa)}

void

pre()

}inline

int lca(int x,int

y)inline

int dis(int x,int y)

ll sum[n],s[n],sf[n];

//注意long long

inline void change(int x,int y)//

修改操作

}inline ll calc(

int x)//

計算以x為根的花費

return

res;

}ll query(

int x)//

點分樹上暴力dfs找最優解

return

res;

}int

main()

tot=n; mx[0]=inf;

find_rt(

1,0); rt=rt; build(rt);

dfs(

1,0); pre();

while(m--)

return0;

}

P3345 ZJOI2015 幻想鄉戰略遊戲

題意 求帶權重心,即求乙個點 u 使得最小化 sum dis u,v times w v 輸出這個最小值。點權帶修,多組詢問。動態點分治。先建出點分樹,以下的父子關係均是建立在點分樹上的。s u 表示子樹 u 的點權和 sfa u 表示子樹 u 對 fa u 的貢獻,即 sum dis v,fa u...

P3345 ZJOI2015 幻想鄉戰略遊戲

傲嬌少女幽香正在玩乙個非常有趣的戰略類遊戲,本來這個遊戲的地圖其實還不算太大,幽香還能管得過來,但是不知道為什麼現在的網遊廠商把遊戲的地圖越做越大,以至於幽香一眼根本看不過來,更別說和別人打仗了。在打仗之前,幽香現在面臨乙個非常基本的管理問題需要解決。整個地圖是乙個樹結構,一共有 n 塊空地,這些空...

洛谷P3345 ZJOI2015 幻想鄉戰略遊戲

題目描述 傲嬌少女幽香正在玩乙個非常有趣的戰略類遊戲,本來這個遊戲的地圖其實還不算太大,幽香還能管得過來,但是不知道為什麼現在的網遊廠商把遊戲的地圖越做越大,以至於幽香一眼根本看不過來,更別說和別人打仗了。在打仗之前,幽香現在面臨乙個非常基本的管理問題需要解決。整個地圖是乙個樹結構,一共有n塊空地,...