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 68ca0f3

Browse files
authored
feat: add rust solution to lc problem: No.2316 (#1859)
No.2316.Count Unreachable Pairs of Nodes in an Undirected Graph
1 parent 9d11a79 commit 68ca0f3

File tree

3 files changed

+112
-0
lines changed

3 files changed

+112
-0
lines changed

‎solution/2300-2399/2316.Count Unreachable Pairs of Nodes in an Undirected Graph/README.md‎

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,45 @@ function countPairs(n: number, edges: number[][]): number {
226226
}
227227
```
228228

229+
### **Rust**
230+
231+
```rust
232+
impl Solution {
233+
pub fn count_pairs(n: i32, edges: Vec<Vec<i32>>) -> i64 {
234+
let n = n as usize;
235+
let mut g = vec![vec![]; n];
236+
let mut vis = vec![false; n];
237+
for e in edges {
238+
let u = e[0] as usize;
239+
let v = e[1] as usize;
240+
g[u].push(v);
241+
g[v].push(u);
242+
}
243+
244+
fn dfs(g: &Vec<Vec<usize>>, vis: &mut Vec<bool>, u: usize) -> i64 {
245+
if vis[u] {
246+
return 0;
247+
}
248+
vis[u] = true;
249+
let mut cnt = 1;
250+
for &v in &g[u] {
251+
cnt += dfs(g, vis, v);
252+
}
253+
cnt
254+
}
255+
256+
let mut ans = 0;
257+
let mut s = 0;
258+
for u in 0..n {
259+
let t = dfs(&g, &mut vis, u);
260+
ans += t * s;
261+
s += t;
262+
}
263+
ans
264+
}
265+
}
266+
```
267+
229268
### **...**
230269

231270
```

‎solution/2300-2399/2316.Count Unreachable Pairs of Nodes in an Undirected Graph/README_EN.md‎

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,45 @@ function countPairs(n: number, edges: number[][]): number {
214214
}
215215
```
216216

217+
### **Rust**
218+
219+
```rust
220+
impl Solution {
221+
pub fn count_pairs(n: i32, edges: Vec<Vec<i32>>) -> i64 {
222+
let n = n as usize;
223+
let mut g = vec![vec![]; n];
224+
let mut vis = vec![false; n];
225+
for e in edges {
226+
let u = e[0] as usize;
227+
let v = e[1] as usize;
228+
g[u].push(v);
229+
g[v].push(u);
230+
}
231+
232+
fn dfs(g: &Vec<Vec<usize>>, vis: &mut Vec<bool>, u: usize) -> i64 {
233+
if vis[u] {
234+
return 0;
235+
}
236+
vis[u] = true;
237+
let mut cnt = 1;
238+
for &v in &g[u] {
239+
cnt += dfs(g, vis, v);
240+
}
241+
cnt
242+
}
243+
244+
let mut ans = 0;
245+
let mut s = 0;
246+
for u in 0..n {
247+
let t = dfs(&g, &mut vis, u);
248+
ans += t * s;
249+
s += t;
250+
}
251+
ans
252+
}
253+
}
254+
```
255+
217256
### **...**
218257

219258
```
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
impl Solution {
2+
pub fn count_pairs(n: i32, edges: Vec<Vec<i32>>) -> i64 {
3+
let n = n as usize;
4+
let mut g = vec![vec![]; n];
5+
let mut vis = vec![false; n];
6+
for e in edges {
7+
let u = e[0] as usize;
8+
let v = e[1] as usize;
9+
g[u].push(v);
10+
g[v].push(u);
11+
}
12+
13+
fn dfs(g: &Vec<Vec<usize>>, vis: &mut Vec<bool>, u: usize) -> i64 {
14+
if vis[u] {
15+
return 0;
16+
}
17+
vis[u] = true;
18+
let mut cnt = 1;
19+
for &v in &g[u] {
20+
cnt += dfs(g, vis, v);
21+
}
22+
cnt
23+
}
24+
25+
let mut ans = 0;
26+
let mut s = 0;
27+
for u in 0..n {
28+
let t = dfs(&g, &mut vis, u);
29+
ans += t * s;
30+
s += t;
31+
}
32+
ans
33+
}
34+
}

0 commit comments

Comments
(0)

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