Solution#
Memo#
// Baekjoon - 2606
// https://www.acmicpc.net/problem/2606
use std::io::{self, Read, Write};
fn main() {
let mut stdin = io::stdin().lock();
let mut stdout = io::stdout().lock();
let mut input = String::new();
stdin.read_to_string(&mut input).unwrap();
let mut lines = input.lines();
let n: usize = lines.next().unwrap().parse().unwrap();
let m: usize = lines.next().unwrap().parse().unwrap();
let mut graph: Vec<Vec<usize>> = vec![vec![]; n + 1];
for _ in 0..m {
let tmp: Vec<usize> = lines.next().unwrap()
.split_whitespace()
.map(|x| x.parse().unwrap())
.collect();
let tn = tmp[0];
let tv = tmp[1];
graph[tn].push(tv);
graph[tv].push(tn);
}
let mut visited = vec![false; n + 1];
dfs(&graph, &mut visited, 1);
// 시작 컴퓨터(1번) 제외
let output = visited.iter().skip(2).filter(|&&v| v).count();
writeln!(stdout, "{}", output).unwrap();
}
fn dfs(graph: &[Vec<usize>], visited: &mut [bool], start: usize) {
visited[start] = true;
for &i in &graph[start] {
if !visited[i] {
dfs(graph, visited, i);
}
}
}