結果
| 問題 |
No.417 チューリップバブル
|
| ユーザー |
tenten
|
| 提出日時 | 2021-01-25 19:30:05 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 492 ms / 2,000 ms |
| コード長 | 2,077 bytes |
| コンパイル時間 | 2,683 ms |
| コンパイル使用メモリ | 87,564 KB |
| 実行使用メモリ | 63,356 KB |
| 最終ジャッジ日時 | 2024-06-22 14:11:15 |
| 合計ジャッジ時間 | 13,238 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 40 |
ソースコード
import java.util.*;
public class Main {
static ArrayList<HashMap<Integer, Integer>> graph = new ArrayList<>();
static int[] values;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
values = new int[n];
for (int i = 0; i < n; i++) {
values[i] = sc.nextInt();
graph.add(new HashMap<>());
}
for (int i = 0; i < n - 1; i++) {
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
graph.get(a).put(b, c);
graph.get(b).put(a, c);
}
System.out.println(dfw(0, 0, m).lastEntry().getValue());
}
static TreeMap<Integer, Integer> dfw(int idx, int parent, int time) {
graph.get(idx).remove(parent);
TreeMap<Integer, Integer> tmp = new TreeMap<>();
if (time < 0) {
return tmp;
}
tmp.put(0, values[idx]);
for (int x : graph.get(idx).keySet()) {
int cost = graph.get(idx).get(x) * 2;
TreeMap<Integer, Integer> next = dfw(x, idx, time - cost);
Integer key = Integer.MAX_VALUE;
while ((key = tmp.lowerKey(key)) != null) {
for (int y : next.keySet()) {
if (cost + y + key > time) {
break;
}
int value = tmp.get(key) + next.get(y);
if (tmp.floorEntry(cost + y + key).getValue() < value) {
tmp.put(cost + y + key, value);
Integer mask = cost + y + key;
while ((mask = tmp.higherKey(mask)) != null) {
if (tmp.get(mask) <= value) {
tmp.remove(mask);
} else {
break;
}
}
}
}
}
}
return tmp;
}
}
tenten