Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d9855b6

Browse files
committed
network time
1 parent 500ae42 commit d9855b6

File tree

2 files changed

+65
-1
lines changed

2 files changed

+65
-1
lines changed

‎src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
mod coin_change2;
1+
mod shortestnetworkpath;
22
fn main() {}

‎src/shortestnetworkpath.rs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
use std::cmp::min;
2+
3+
pub struct Solution {}
4+
5+
impl Solution {
6+
pub fn network_delay_time(times: Vec<Vec<i32>>, n: i32, k: i32) -> i32 {
7+
use std::cmp::Reverse;
8+
use std::collections::BinaryHeap;
9+
use std::collections::HashMap;
10+
use std::collections::HashSet;
11+
12+
#[derive(PartialEq, Eq, PartialOrd, Ord)]
13+
pub struct Edge {
14+
weight: i32,
15+
node: i32,
16+
}
17+
18+
let mut visited: HashSet<i32> = HashSet::new();
19+
let mut edges: HashMap<i32, Vec<Edge>> = HashMap::new();
20+
21+
for val in times {
22+
let (u, v, w) = (val[0], val[1], val[2]);
23+
24+
let edge = Edge { weight: w, node: v };
25+
26+
if edges.contains_key(&u) {
27+
edges.entry(u).and_modify(|val| val.push(edge));
28+
} else {
29+
edges.insert(u, vec![edge]);
30+
}
31+
}
32+
33+
let mut min_heap: BinaryHeap<Reverse<Edge>> = BinaryHeap::new();
34+
let mut res = 0;
35+
36+
min_heap.push(Reverse(Edge { weight: 0, node: k }));
37+
38+
while !min_heap.is_empty() {
39+
let edge = min_heap.pop().unwrap().0;
40+
41+
if visited.contains(&edge.node) {
42+
continue;
43+
}
44+
visited.insert(edge.node);
45+
res = edge.weight;
46+
47+
if let Some(edges) = edges.get(&edge.node) {
48+
for e in edges {
49+
if !visited.contains(&e.node) {
50+
min_heap.push(Reverse(Edge {
51+
weight: e.weight + res,
52+
node: e.node,
53+
}));
54+
}
55+
}
56+
}
57+
}
58+
59+
if res == 0 || visited.len() != n as usize {
60+
return -1;
61+
}
62+
res
63+
}
64+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /