傳送門
考慮先隨便找乙個點作為根,然後再慢慢移動根,這樣一步步走到最優的點
設 $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塊空地,...