\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...