BZOJ4711 小奇挖礦

2022-05-10 21:54:16 字數 1674 閱讀 6865

【題目背景】

小奇在喵星系使用了無限非概率驅動的採礦機,以至於在所有星球上都採出了一些礦石,現在它準備建一些礦石倉

庫並把礦石運到各個倉庫裡。

【問題描述】

喵星系有n個星球,標號為1到n,星球以及星球間的航線形成一棵樹。所有星球間的雙向航線的長度都為1。小奇要

在若干個星球建礦石倉庫,設立每個倉庫的費用為k。對於未設立礦石倉庫的星球,設其到乙個倉庫的距離為i,則

將礦石運回的費用為di。請你幫它決策最小化費用。

第一行2個整數n,k。

第二行n-1個整數,d1,d2,…dn-1,保證di<=di+1。

接下來n-1行,每行2個整數x,y,表示星球x和星球y存在雙向航線。

n<=200,0<=k,di<=100000

輸出一行乙個整數,表示最小費用。

8 10

2 5 9 11 15 19 20

1 41 3

1 74 6

2 82 3

3 538

【樣例解釋】

在1,2號星球建立倉庫。

令$f[i][j]$表示$i$的子樹已經計算離$i$最近的倉庫為$j$,且還沒有算上建造的方案

乙個兒子有2種情況;

1.最近的是k

2.最近的是j

寫出來就是

$f[x][i]=min(f[v][j]+k,f[v][i])$

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7struct

node

8edge[200001

];11

int num,head[21],cnt,tot,q[21],p[21],dep[21],fa[21],size[21],son[21],top[21

];12

int dfn[21],n,k,d[21],ans,min,sum,f[201][201],dis[201][201

];13

void add(int u,int

v)14

20void dfs1(int x,int

pa)21 33}

34void dfs2(int x,int pa,int

tp)35 45}

46int lca(int x,int

y)47

54if (dep[x]>dep[y]) swap(x,y);

55return

x;56}57

int get_dis(int x,int

y)58

61void dfs(int x,int

pa)62 76}

77int

main()

78 84

for (i=1;i<=n-1;i++)

8589 dfs1(1,0

);90 dfs2(1,0,1

);91

for (i=1;i<=n;i++)

9297

}98 dfs(1,0

);99 ans=2e9;

100for (i=1;i<=n;i++)

101 ans=min(ans,f[1][i]+k);

102 cout<103 }

小奇挖礦 Explo

題目背景 小奇要開採一些礦物,它駕駛著一台帶有鑽頭 初始能力值 w 的飛船,按既定路線依次飛過喵星系的 n 個星球。問題描述 星球分為 2 類 資源型和維修型。1.資源型 含礦物質量 a i 若選擇開採,則得到 a i p 的金錢,之後鑽頭損耗 k 即p p 1 0.01k 2.維修型 維護費用 b...

小奇挖礦 解題報告

小奇挖礦 題目背景 小奇要開採一些礦物,它駕駛著一台帶有鑽頭 初始能力值w 的飛船,按既定路線依次飛過喵星系的n個星球。問題描述 星球分為2類 資源型和維修型。1.資源型 含礦物質量a i 若選擇開採,則得到a i p的金錢,之後鑽頭損耗k 即p p 1 0.01k 2.維修型 維護費用b i 若選...

小奇挖礦 2 題解

小奇挖礦 2 題目 題目背景 小奇飛船的鑽頭開啟了無限耐久 精準採集模式!這次它要將原礦運到泛光之源的礦石交易市場,以便為飛船公升級無限非概率引擎。問題描述 現在有m 1個星球,從左到右標號為0到m,小奇最初在0號星球。有n處礦體,第i處礦體有ai單位原礦,在第bi個星球上。由於飛船使用的是老式的跳...