| Task: | Laskettelukeskus |
| Sender: | axka |
| Submission time: | 2023-11-06 13:55:58 +0200 |
| Language: | Rust |
| Status: | READY |
| Result: | 53 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 53 |
| #2 | TIME LIMIT EXCEEDED | 0 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | 1, 2 | details |
| #2 | ACCEPTED | 0.00 s | 1, 2 | details |
| #3 | ACCEPTED | 0.00 s | 1, 2 | details |
| #4 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #5 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #6 | ACCEPTED | 0.00 s | 1, 2 | details |
| #7 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #8 | ACCEPTED | 0.00 s | 1, 2 | details |
| #9 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #10 | ACCEPTED | 0.00 s | 1, 2 | details |
| #11 | TIME LIMIT EXCEEDED | -- | 2 | details |
| #12 | ACCEPTED | 0.00 s | 1, 2 | details |
| #13 | TIME LIMIT EXCEEDED | -- | 2 | details |
Code
use std::io::stdin;
/// Input:
/// 5
/// 1 2
/// 1 3
/// 3 4
/// 3 5
/// 0 2 4 3 1
/// output:
/// 6
type RinneId = usize;
struct Polku(RinneId, RinneId);
#[derive(Clone, Debug)]
struct Rinne {
#[allow(dead_code)]
debug_id: RinneId,
suorat_rinteet_alas: Vec<Rinne>,
omat_aurauskerrat: usize,
}
impl Rinne {
fn new_compute_children(id: RinneId, polut: &[Polku], aurauskerrat: &[usize]) -> Self {
let suorat_rinteet_alas = polut
.iter()
.filter(|polku| polku.0 == id)
.map(|polku| Rinne::new_compute_children(polku.1, polut, aurauskerrat))
.collect();
Self {
debug_id: id,
suorat_rinteet_alas,
omat_aurauskerrat: aurauskerrat[id - 1],
}
}
fn max_aurauskerat(&self) -> usize {
self.omat_aurauskerrat.max(
self.suorat_rinteet_alas
.iter()
.map(Rinne::max_aurauskerat)
.sum()
)
}
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut lines = stdin().lines();
let rinteet: usize = lines.next().unwrap()?.parse()?;
let polut: Result<Vec<Polku>, Box<dyn std::error::Error>> = lines
.by_ref()
.take(rinteet - 1)
.map(|rivi| {
let rivi = rivi?;
// Lue luvut rivistä
let mut luvut = rivi.split_ascii_whitespace().map(|s| s.parse());
Ok(Polku(luvut.next().unwrap()?, luvut.next().unwrap()?))
})
.collect();
let polut = polut?;
let aurauskerrat = lines
.next()
.unwrap()?
.split_ascii_whitespace()
.map(|s| s.parse())
.collect::<Result<Vec<usize>, _>>()?;
assert_eq!(aurauskerrat.len(), rinteet);
let tree = Rinne::new_compute_children(1, &polut, &aurauskerrat);
let lumiauroja = tree.max_aurauskerat();
println!("{lumiauroja}");
Ok(())
}
Test details
Test 1
Group: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 5 1 2 1 3 3 4 3 5 ... |
| correct output |
|---|
| 6 |
| user output |
|---|
| 6 |
Test 2
Group: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 100 1 73 1 64 64 23 1 88 ... |
| correct output |
|---|
| 2675 |
| user output |
|---|
| 2675 |
Test 3
Group: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 100 1 36 36 56 56 59 36 97 ... |
| correct output |
|---|
| 2808 |
| user output |
|---|
| 2808 |
Test 4
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 1 45452 1 74209 45452 78960 45452 79820 ... |
| correct output |
|---|
| 28399367694319 |
| user output |
|---|
| (empty) |
Test 5
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 1 31165 1 23263 31165 89516 31165 53122 ... |
| correct output |
|---|
| 28546840313799 |
| user output |
|---|
| (empty) |
Test 6
Group: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 100 1 79 79 9 79 45 45 10 ... |
| correct output |
|---|
| 0 |
| user output |
|---|
| 0 |
Test 7
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 1 66038 1 56789 56789 7403 66038 69542 ... |
| correct output |
|---|
| 0 |
| user output |
|---|
| (empty) |
Test 8
Group: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 100 1 2 2 3 3 4 4 5 ... |
| correct output |
|---|
| 100 |
| user output |
|---|
| 100 |
Test 9
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 1 2 2 3 3 4 4 5 ... |
| correct output |
|---|
| 1000000000 |
| user output |
|---|
| (empty) |
Test 10
Group: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 100 1 2 1 3 2 4 2 5 ... |
| correct output |
|---|
| 2809 |
| user output |
|---|
| 2809 |
Test 11
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 1 2 1 3 2 4 2 5 ... |
| correct output |
|---|
| 26053917212428 |
| user output |
|---|
| (empty) |
Test 12
Group: 1, 2
Verdict: ACCEPTED
| input |
|---|
| 100 1 2 1 3 2 4 2 5 ... |
| correct output |
|---|
| 5000 |
| user output |
|---|
| 5000 |
Test 13
Group: 2
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100000 1 2 1 3 2 4 2 5 ... |
| correct output |
|---|
| 50000000000000 |
| user output |
|---|
| (empty) |
