結果
| 問題 | No.3660 LIS on Tree |
| コンテスト | |
| ユーザー |
QiToY
|
| 提出日時 | 2026-08-30 14:19:40 |
| 言語 | Rust (1.97.1 + proconio + num + itertools) |
| 結果 |
AC
|
| 実行時間 | 58 ms / 2,000 ms |
| + 971µs | |
| コード長 | 1,614 bytes |
| 記録 | |
| コンパイル時間 | 12,447 ms |
| コンパイル使用メモリ | 186,560 KB |
| 実行使用メモリ | 19,104 KB |
| 最終ジャッジ日時 | 2026-08-30 14:19:58 |
| 合計ジャッジ時間 | 11,406 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 20 |
ソースコード
#![allow(unused_imports)]
fn main() {
input! {
n: usize,
s: [u64; n],
e: [(Usize1, Usize1); n-1],
}
let mut g = vec![vec![]; n];
let mut d = vec![0; n];
for (a, b) in e {
if s[a] < s[b] {
g[a].push(b);
d[b] += 1;
}
if s[b] < s[a] {
g[b].push(a);
d[a] += 1;
}
}
let mut dp = vec![0; n];
let mut que = VecDeque::new();
for (i, &d) in d.iter().enumerate() {
if d == 0 {
que.push_back(i);
}
}
// eprintln!("{que:?}");
while let Some(v) = que.pop_front() {
dp[v] += s[v];
for &u in &g[v] {
chmax!(dp[u], dp[v]);
d[u] -= 1;
if d[u] == 0 {
que.push_back(u);
}
}
}
println!("{}", dp.iter().max().unwrap());
}
use proconio::{input, marker::*};
use itertools::{iproduct, izip, Itertools as _};
use std::{cmp::Reverse, collections::*};
#[macro_export]
macro_rules! chmax {
($a:expr, $b:expr) => {{
let tmp = $b;
if $a < tmp {
$a = tmp;
true
} else {
false
}
}};
}
#[macro_export]
macro_rules! chmin {
($a:expr, $b:expr) => {{
let tmp = $b;
if $a > tmp {
$a = tmp;
true
} else {
false
}
}};
}
#[macro_export]
/// mvec![]
macro_rules! mvec {
($val:expr; ()) => {
$val
};
($val:expr; ($size:expr $(,$rest:expr)*)) => {
vec![mvec![$val; ($($rest),*)]; $size]
};
}
QiToY