洛谷P3345 ZJOI2015 幻想鄉戰略遊戲

2021-08-02 05:41:09 字數 2458 閱讀 3926

題目描述

傲嬌少女幽香正在玩乙個非常有趣的戰略類遊戲,本來這個遊戲的地圖其實還不算太大,幽香還能管得過來,但是不知道為什麼現在的網遊廠商把遊戲的地圖越做越大,以至於幽香一眼根本看不過來,更別說和別人打仗了。

在打仗之前,幽香現在面臨乙個非常基本的管理問題需要解決。 整個地圖是乙個樹結構,一共有n塊空地,這些空地被n-1條帶權邊連線起來,使得每兩個點之間有一條唯一的路徑將它們連線起來。

在遊戲中,幽香可能在空地上增加或者減少一些軍隊。同時,幽香可以在乙個空地上放置乙個補給站。 如果補給站在點u上,並且空地v上有dv個單位的軍隊,那麼幽香每天就要花費dv*dist(u,v)的金錢來補給這些軍隊。

由於幽香需要補給所有的軍隊,因此幽香總共就要花費為sigma(dv*dist(u,v),其中1<=v<=n)的代價。其中dist(u,v)表示u個v在樹上的距離(唯一路徑的權和)。

因為遊戲的規定,幽香只能選擇乙個空地作為補給站。在遊戲的過程中,幽香可能會在某些空地上製造一些軍隊,也可能會減少某些空地上的軍隊,進行了這樣的操作以後,出於經濟上的考慮,幽香往往可以移動他的補給站從而省一些錢。

但是由於這個遊戲的地圖是在太大了,幽香無法輕易的進行最優的安排,你能幫幫她嗎? 你可以假定一開始所有空地上都沒有軍隊。

輸入輸出格式

輸入格式:

第一行兩個數n和q分別表示樹的點數和幽香操作的個數,其中點從1到n標號。 接下來n-1行,每行三個正整數a,b,c,表示a和b之間有一條邊權為c的邊。 接下來q行,每行兩個數u,e,表示幽香在點u上放了e單位個軍隊(如果e<0,就相當於是幽香在u上減少了|e|單位個軍隊,說白了就是du←du+e)。資料保證任何時刻每個點上的軍隊數量都是非負的。

輸出格式:

對於幽香的每個操作,輸出操作完成以後,每天的最小花費,也即如果幽香選擇最優的補給點進行補給時的花費。

輸入輸出樣例

輸入樣例#1:

10 5

1 2 1

2 3 1

2 4 1

1 5 1

2 6 1

2 7 1

5 8 1

7 9 1

1 10 1

3 1

2 1

8 1

3 1

4 1

輸出樣例#1:

0 1

4 5

6 說明

對於所有資料,1<=c<=1000, 0<=|e|<=1000, n<=105, q<=105

#include

#include

#include

#include

#include

#define ll long long

#define inf 1000000000

#define mod 1000000007

using namespace std;

inline int

read()

while(ch>='0'&&ch<='9')

return

x*f;

}ll ans,tot;

int n,m,cnt,id,rt=1;

int head[100005];

int fa[100005],size[100005],dep[100005],d[100005],bl[100005];

intpos[100005];

int sum[400005];

struct edge e[200005];

void insert(int u,int v,int w) ;

head[u]=cnt;

e[++cnt]=(edge) ;

head[v]=cnt;

}void build(int k,int l,int r,int

pos,int val)

int mid=(l+r)>>1;

if(pos

<=mid)build(k<<1,l,mid,pos,val);

else build(k<<1|1,mid+1,r,pos,val);

sum[k]=sum[k<<1]+sum[k<<1|1];

}int query(int k,int l,int r,int

x,int

y) void dfs(int

x) }

void dfs2(int

x,int cha)

int lca(int

x,int

y) int dis(int

x,int

y) ll cal(int

x,int v) else

return ans+(ll)(t1-t2)*v;

}void move(int

x) dfs(1);

dfs2(1,1);

while(m--)

return

0;}

洛谷P3345 ZJOI2015 幻想鄉戰略遊戲

傳送門 先考慮乙個簡單的問題 怎麼在有修改的情況下快速求乙個點作為補給站的答案。注意到和路徑有關,所以很容易想到點分樹。接著可以想到乙個十分暴力的做法,就是修改後,每次列舉相鄰的點,如果更優就走過去。很容易想到因為每次重心不會移動太遠,這個是可以過的,資料也不太好造來卡這個做法。那麼有沒有穩定的做法...

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 塊空地,這些空...