-
Notifications
You must be signed in to change notification settings - Fork 0
/
e.rs
37 lines (33 loc) · 855 Bytes
/
e.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use std::collections::VecDeque;
use proconio::{input, marker::Usize1};
fn main() {
input! {
n: usize,
m: usize,
uv: [(Usize1, Usize1); m],
};
let mut edges = vec![vec![]; n];
for (u, v) in uv {
edges[u].push(v);
}
let mut all = 0_usize;
for start in 0..n {
let mut used = vec![false; n];
used[start] = true;
let mut count = 0_usize;
let mut deque = edges[start].iter().copied().collect::<VecDeque<usize>>();
while let Some(u) = deque.pop_front() {
if used[u] {
continue;
}
used[u] = true;
count += 1;
for v in edges[u].iter().copied() {
deque.push_back(v);
}
}
all += count;
}
let ans = all - m;
println!("{}", ans);
}