牛半仙的魔塔

2021-10-25 07:43:22 字數 3704 閱讀 3718

\operatorname

nowcod

er21

2925

——>點我可以檢視其它題目(目錄)<——

——>點我跳轉<——

牛半仙的妹子被大魔王抓走了,牛半仙為了就他的妹子,前往攻打魔塔。

魔塔為一棵樹,牛半仙初始在一號點。

牛半仙有攻擊,防禦,血量三個屬性。

除一號點外每個點都有魔物防守,魔物也有攻擊,防禦,血量三個屬性。

每個怪物後面都守著一些藍寶石,獲得 1

11 藍寶石可增加 1

11 防。

牛半仙具有突襲屬性,所以遇到魔物後會率先發動攻擊,然後牛半仙和魔物輪換地攻擊對方。

乙個角色被攻擊一次減少的血量是對方的攻擊減去自己的防禦。

當乙個角色的血量小於等於 0

00 時,他就會死亡。

當牛半仙第一次到達某個節點時會與這個節點的魔物發生戰鬥。

當乙個魔物死亡後,這個魔物所在的節點就不會再產生新的魔物。

現在牛半仙想知道他打死魔塔的所有魔物後的最大血量。

第一行乙個 n

nn 代表節點數。

隨後 n−1

n-1n−

1 行,每行兩個數 i,j

i,ji,

j,表示 i

ii 與 j

jj 節點有邊相連。

隨後一行,三個數,依次為勇士的血量、攻擊、防禦。

隨後 n−1

n-1n−

1 行,每行四個數,依次為怪物的血量、攻擊、防禦,和其守著的藍寶石數量。

乙個數,代表最大血量。如果牛半仙在打死魔塔的所有魔物之前就已經死亡了,則輸出 −1-1

−1。

6

1 21 3

1 44 5

5 650000 10 0

35 54 2 4

25 55 3 5

21 51 4 5

20 64 5 3

43 64 6 1

48901
打怪的順序依次為 4,3,5,2,6

可以證明不存在更優的方案。

對於 20

%20\%

20% 的資料:n≤15

n\leq 15

n≤15

又有 30

%30\%

30% 的資料:n

≤1000

n\leq 1000

n≤1000

,且保證對於每一條邊 (i,

j)

(i,j)

(i,j

),一定滿足 i=1

i=1i=

1對於前 90

%90\%

90% 的資料:n

≤1000

n\leq 1000

n≤1000

,且保證對於每一條邊 (i,

j)

(i,j)

(i,j

),一定滿足 j=i

+1

j=i+1

j=i+

1 或 i=1

i=1i=

1對於最後 10

%10\%

10% 的資料:n

≤100000

n\leq 100000

n≤1000

00,且保證對於每一條邊 (i,

j)

(i,j)

(i,j

),一定滿足 j=i

+1

j=i+1

j=i+

1 或 i=1

i=1i=

1對於 100

%100\%

100%

的資料:有牛半仙血量 <5∗

10

18<5*10^

<5∗

1018

,攻擊 =

2000

=2000

=200

0,盔甲防禦 =0=0

=0。怪物血量為 300010

63000~10^6

300010

6,攻擊 5×1

05−7

×105

5\times 10^5- 7\times 10^5

5×105−

7×10

5,防禦 ≤

1000

\leq 1000

≤100

0,打完乙隻怪後獲得的藍寶石數量為 1

11 至 5

55這道題是一道貪心。

首先我們觀察資料,可得牛半仙是不會***,怪物的攻擊不會被完全防禦,牛半仙一定可以打死怪物等資訊。

我們可以直接通過公式算出在沒有藍寶石的時候,打怪物要扣多少血。然後拿到寶石之後,再補回血量。

但是我們怎麼確定打怪物的順序呢?

其實我們可以讓第乙個打你的怪物的藍寶石數除以打你的次數(我們叫它價效比)盡可能的小。

為什麼呢?

我們要讓這個藍寶石在以後發揮更大的作用,就是要讓打你次數多的放在後面。

那我們就維護乙個大根堆(以價效比為關鍵字),每一次取出最大的那乙個,然後就把能走到的沒走過的點放進堆。而且加上能補回的血量。(就是加上一直以來獲得的藍寶石但不算這一次的,乘這個怪物打的次數)

然後最後輸出剩下的血量就可以了。

#include

#include

#define ll long long

using

namespace std;

struct node e[

200001];

priority_queue double

,int

>

> a;

//以價效比為關鍵字的大根堆

int n, x, y, le[

100001

], kk, fa[

100001

], fath[

100001

], x;

ll blood[

100001

], at[

100001

], hold[

100001

], blue[

100001

], time[

100001];

bool in[

100001];

void

add(

int x,

int y)

; le[x]

= kk;

e[++kk]

=(node)

; le[y]

= kk;

}void

dfs(

int now,

int father)

}int

find

(int now)

intmain()

fath[1]

=1;scanf

("%lld %lld %lld"

,&blood[1]

,&at[1]

,&hold[1]

);for(

int i =

2; i <= n; i++

)dfs(1

,0);

in[1]

=1;while

(!a.

empty()

)printf

("%lld"

, blood[1]

);return0;

}

堆 並查集 牛客模擬賽 牛半仙的魔塔

d 牛 半仙的魔 塔d 牛半仙的魔塔 d 牛半仙的 魔塔牛半仙的妹子被大魔王抓走了,牛半仙為了就他的妹子,前往攻打魔塔。魔塔為一棵樹,牛半仙初始在一號點。牛半仙有攻擊,防禦,血量三個屬性。除一號點外每個點都有魔物防守,魔物也有攻擊,防禦,血量三個屬性。每個怪物後面都守著一些藍寶石,獲得1藍寶石可增加...

牛半仙的妹子序列

傳送門 to nowcoder 不妨把題目中的 魅力值 叫做 a langle a rangle a 用 d p tt dp dp,轉移條件比較苛刻。如果 f j f j f j 能轉移到 f i f i f i 需要滿足 只關注不超過a ia i ai 的數時,aj aj a j a jaj aj...

牛半仙的妹子序列

牛半仙有 n 個妹子,魅力值分別為 1 n,排成一排。牛半仙會在這些妹子中選若干個,但是他很 貪婪,他只會選完美妹子序列。乙個妹子序列 p ip i pi 指妹子的位置 是完美的,當且僅當其是一 個上公升序列,且不存在乙個 j,使得j pm j p m j pm 且 v j vp mv j v vj...