| Task: | Download Speed |
| Sender: | Giaco |
| Submission time: | 2025-10-23 19:55:49 +0300 |
| Language: | Rust (2021) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | details |
| #2 | ACCEPTED | 0.00 s | details |
| #3 | ACCEPTED | 0.00 s | details |
| #4 | ACCEPTED | 0.00 s | details |
| #5 | ACCEPTED | 0.00 s | details |
| #6 | ACCEPTED | 0.01 s | details |
| #7 | ACCEPTED | 0.01 s | details |
| #8 | ACCEPTED | 0.00 s | details |
| #9 | ACCEPTED | 0.00 s | details |
| #10 | ACCEPTED | 0.00 s | details |
| #11 | ACCEPTED | 0.00 s | details |
| #12 | ACCEPTED | 0.00 s | details |
Compiler report
warning: unused imports: `Reverse`, `max`, `min`
--> input/code.rs:1:16
|
1 | use std::cmp::{max, min, Reverse};
| ^^^ ^^^ ^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: unused imports: `BTreeMap`, `BinaryHeap`, `HashMap`, `HashSet`
--> input/code.rs:2:24
|
2 | use std::collections::{BTreeMap, BinaryHeap, HashMap, HashSet, VecDeque};
| ^^^^^^^^ ^^^^^^^^^^ ^^^^^^^ ^^^^^^^
warning: unused import: `std::process::exit`
--> input/code.rs:4:5
|
4 | use std::process::exit;
| ^^^^^^^^^^^^^^^^^^
warning: 3 warnings emittedCode
use std::cmp::{max, min, Reverse};
use std::collections::{BTreeMap, BinaryHeap, HashMap, HashSet, VecDeque};
use std::io::{self, Read};
use std::process::exit;
macro_rules! input {
($it: expr) => {
$it.next().unwrap().parse().unwrap()
};
($it: expr, $T: ty) => {
$it.next().unwrap().parse::<$T>().unwrap()
};
}
/*
mod classes;
mod homework;
fn main() {
// println!("{}", "-".repeat(20));
// classes::c15::task2();
homework::hw6::task2();
// println!("{}", "-".repeat(20));
}
// */
fn main() {
let mut buf = String::new();
io::stdin().read_to_string(&mut buf).unwrap();
let mut it = buf.split_whitespace();
let (n, m): (usize, usize) = (input!(it), input!(it));
let mut capacity = vec![vec![0i64; n + 1]; n + 1];
for _ in 0..m {
let (a, b, c): (usize, usize, i64) = (input!(it), input!(it), input!(it));
capacity[a][b] += c;
}
let max_flow = ford_fulkerson(&mut capacity, 1, n);
println!("{}", max_flow);
}
fn ford_fulkerson(capacity: &mut Vec<Vec<i64>>, source: usize, sink: usize) -> i64 {
let n = capacity.len();
let mut flow = 0;
loop {
let parent = bfs(capacity, source, sink, n);
if parent[sink] == usize::MAX { break; }
let mut path_flow = i64::MAX;
let mut v = sink;
while v != source {
let u = parent[v];
path_flow = path_flow.min(capacity[u][v]);
v = u;
}
v = sink;
while v != source {
let u = parent[v];
capacity[u][v] -= path_flow;
capacity[v][u] += path_flow;
v = u;
}
flow += path_flow;
}
flow
}
fn bfs(capacity: &Vec<Vec<i64>>, source: usize, sink: usize, n: usize) -> Vec<usize> {
let mut visited = vec![false; n];
let mut parent = vec![usize::MAX; n];
let mut queue = VecDeque::new();
queue.push_back(source);
visited[source] = true;
while let Some(u) = queue.pop_front() {
if u == sink {
break;
}
for v in 1..n {
if !visited[v] && capacity[u][v] > 0 {
visited[v] = true;
parent[v] = u;
queue.push_back(v);
}
}
}
parent
}Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 4 3 1 2 5 2 3 3 3 4 6 |
| correct output |
|---|
| 3 |
| user output |
|---|
| 3 |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 4 5 1 2 1 1 3 1 2 3 1 2 4 1 ... |
| correct output |
|---|
| 2 |
| user output |
|---|
| 2 |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 4 5 1 2 1000000000 1 3 1000000000 2 3 1 2 4 1000000000 ... |
| correct output |
|---|
| 2000000000 |
| user output |
|---|
| 2000000000 |
Test 4
Verdict: ACCEPTED
| input |
|---|
| 2 1 2 1 100 |
| correct output |
|---|
| 0 |
| user output |
|---|
| 0 |
Test 5
Verdict: ACCEPTED
| input |
|---|
| 2 1000 1 2 1000000000 1 2 1000000000 1 2 1000000000 1 2 1000000000 ... |
| correct output |
|---|
| 1000000000000 |
| user output |
|---|
| 1000000000000 |
Test 6
Verdict: ACCEPTED
| input |
|---|
| 500 998 1 2 54 1 3 59 1 4 83 2 5 79 ... |
| correct output |
|---|
| 60 |
| user output |
|---|
| 60 |
Test 7
Verdict: ACCEPTED
| input |
|---|
| 500 998 1 2 530873053 1 3 156306296 1 4 478040476 3 5 303609600 ... |
| correct output |
|---|
| 1093765123 |
| user output |
|---|
| 1093765123 |
Test 8
Verdict: ACCEPTED
| input |
|---|
| 2 1 1 2 1 |
| correct output |
|---|
| 1 |
| user output |
|---|
| 1 |
Test 9
Verdict: ACCEPTED
| input |
|---|
| 4 5 1 2 3 2 4 2 1 3 4 3 4 5 ... |
| correct output |
|---|
| 6 |
| user output |
|---|
| 6 |
Test 10
Verdict: ACCEPTED
| input |
|---|
| 4 5 1 2 1 1 3 2 3 2 1 2 4 2 ... |
| correct output |
|---|
| 3 |
| user output |
|---|
| 3 |
Test 11
Verdict: ACCEPTED
| input |
|---|
| 10 999 1 2 1000000000 1 2 1000000000 1 2 1000000000 1 2 1000000000 ... |
| correct output |
|---|
| 111000000000 |
| user output |
|---|
| 111000000000 |
Test 12
Verdict: ACCEPTED
| input |
|---|
| 7 9 1 2 1 1 3 1 1 4 1 2 5 1 ... |
| correct output |
|---|
| 2 |
| user output |
|---|
| 2 |
