6. Обход графа

Задача

Найдите размер компоненты связности, содержащей заданную вершину в неориентированном графе.

Входные данные

В первой строке записаны числа $N$ и $S$ ($1 \leqslant N \leqslant 100$, $1 \leqslant S \leqslant N$) — количество вершин и номер стартовой вершины. Далее следует матрица смежности графа: $N$ строк по $N$ чисел, где $0$ означает отсутствие ребра, а $1$ — его наличие. На главной диагонали всегда стоят нули.

Выходные данные

Выведите одно число — количество вершин в компоненте связности, содержащей вершину $S$.

Пример

стандартный ввод      стандартный вывод
3 1                    3
0 1 1
1 0 0
1 0 0

Ограничения

  • Время: 1 секунда
  • Память: 256 мегабайт
Редакционный разбор Так как граф задан матрицей смежности, проще всего выполнять обход, перебирая всю строку матрицы для текущей вершины. Стартуем DFS/BFS из вершины $S$, отмечаем посещённые вершины и считаем их количество. Псевдокод DFS: ```cpp vector used(n); function<void(int)> dfs = [&](int v) { used[v] = 1; for (int u = 0; u < n; ++u) if (g[v][u] && !used[u]) { dfs(u); } }; dfs(S-1); int ans = accumulate(used.begin(), used.end(), 0); ``` Матрица $100 \times 100$ легко помещается в память. Сложность $O(N^2)$ за счёт перебора всех строк. </details> ### Mentioned by - [DFS1 — параллель B'](/dsa-notes/bp2025/contests/dfs1/){: .dsa-mention } — F: 6. Обход графа - [Каталог задач](/dsa-notes/problems/){: .dsa-mention } — F: 6. Обход графа