File tree 3 files changed +112
-0
lines changed
solution/2300-2399/2316.Count Unreachable Pairs of Nodes in an Undirected Graph
3 files changed +112
-0
lines changed Original file line number Diff line number Diff line change @@ -226,6 +226,45 @@ function countPairs(n: number, edges: number[][]): number {
226
226
}
227
227
```
228
228
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
+
229
268
### ** ...**
230
269
231
270
```
Original file line number Diff line number Diff line change @@ -214,6 +214,45 @@ function countPairs(n: number, edges: number[][]): number {
214
214
}
215
215
```
216
216
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
+
217
256
### ** ...**
218
257
219
258
```
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments