Для решения задачи можно использовать алгоритм обхода графа в глубину (DFS).
1. Создадим граф, представленный в виде списка смежности, используя исходный массив чисел. Каждый элемент массива будет соответствовать вершине графа, а значение элемента – количеству доступных связей для этой вершины.
2. Создадим вспомогательный список visited, чтобы отслеживать посещенные вершины. Изначально все значения списка будут равны false.
3. Для каждой вершины графа вызовем функцию DFS с передачей текущей вершины и списка visited.
4. Внутри функции DFS проверим, является ли текущая вершина уже посещенной. Если да, то вернемся обратно.
5. Иначе, установим значение visited[current_vertex] в true, чтобы отметить текущую вершину как посещенную.
6. Затем, проверим количество доступных связей для текущей вершины. Если оно равно нулю, вернем false, так как не все элементы графа могут быть соединены связями.
7. Если количество доступных связей больше нуля, рекурсивно вызовем функцию DFS для каждого соседнего элемента текущей вершины.
8. В конце функции DFS вернем true, так как мы успешно обошли все вершины графа и все элементы могут быть связаны.
9. После прохождения цикла по всем вершинам графа, если все вызовы функции DFS возвращают true, выведем “Yes”. В противном случае выведем “No”.
Алгоритм будет иметь сложность O(N+M), где N – количество элементов в массиве, а M – сумма значений всех элементов массива (количество связей в графе).