Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 

Точки и линии

(Время: 1 сек. Память: 16 Мб Сложность: 33%)

В задаче требовалось вывести «Yes», если возможно построить неориентированный граф из N вершин и M ребер, так, чтобы он был несвязным. Разберем, какое максимальное количество ребер может быть в несвязном графе из N вершин.

Пусть G – это граф, имеющий N вершин, K компонент связности и максимально возможное количество ребер M. Покажем, что M =(N−K)•(N−K+1)/2.

Легко понять, что каждая компонента графа G является полным графом. Пусть ni количество вершин в компоненте с номером i. Без ограничения общности можно полагать, что n1 ≥ n2 ≥ ... ≥ nk. Докажем, что n2 = n3 = ... = nk = 1. Предположим, что n2 > 1, тогда если мы отцепим от компоненты 2 вершину u, то потеряем n2−1 ребро. Прицепим u к первой компоненте, таким образом, получая n1 новых ребер. Так как n1 > n2−1, то получаем, что если n2 > 1, то M не максимально, что противоречит выбору G. Таким образом, n2 = n3 = ... = nk = 1.

Теперь из формулы максимального количества ребер для k компонент легко установить, что выгоднее всего брать k = 2. Таким образом, получаем решение:

  read(n,m)
  if((n-1)∙(n−2) >= 2*m) write('Yes') else write('No')

Разбор: Александр Торопов.

[Обсуждение] [Все попытки] [Задача]


Красноярский краевой Дворец пионеров, (c)2006 - 2026, ИНН 246305493507, E-mail: admin@acmp.ru