1. Главная
  2. Библиотека
  3. Программирование
  4. D. Подземелья и личи ограничение по времени на тест: 4.5...
Решение задачи на тему

D. Подземелья и личи ограничение по времени на тест: 4.5 секунд ограничение по памяти на тест: 512 мегабайт Лич Сандро решил пойти в подземелье за легендарными сокровищами. Подземелье является запутанным переплетением коридоров и комнат. Каждый коридор

  • Программирование
  • #Основы алгоритмизации и программирования
  • #Структуры и алгоритмы обработки данных
D. Подземелья и личи ограничение по времени на тест: 4.5 секунд ограничение по памяти на тест: 512 мегабайт Лич Сандро решил пойти в подземелье за легендарными сокровищами. Подземелье является запутанным переплетением коридоров и комнат. Каждый коридор

Условие:

D. Подземелья и личи ограничение по времени на тест: 4.5 секунд ограничение по памяти на тест: 512 мегабайт
Лич Сандро решил пойти в подземелье за легендарными сокровищами. Подземелье является запутанным переплетением коридоров и комнат. Каждый коридор имеет ровно один вход и ровно один выход, и передвигаться по нему можно только в направлении от входа к выходу (но не в обратном). Чтобы получить легендарные сокровища, Сандро нужно преодолетьKлюбых коридоров, не обязательно различных. Каждый коридор характеризуется уровнем магической ауры, и, чтобы пройти по нему, Сандро должен иметь при себе артефакт такого же или выше уровня. Изначально Сандро может телепортироваться в любую комнату и начать свой поход из неё. Помогите личу Сандро понять, артефакт какого минимального уровня ему понадобится, чтобы получить легендарные сокровища.
Входные данные: Первая строка содержит целые числаN, M и K - количество комнат в подземелье, количество коридоров в подземелье и сколько коридоров нужно преодолеть личу Сандро, чтобы получить легендарные сокровища ( 1 ≤ N, M ≤ 105 ; 0 ≤ K ≤ 1012 ).

Каждая из следующих M строк является описанием коридора и содержит целые числа u{i}, v{i}, si - комната, в которой находится вход в i-й коридор, комната, в которой находится выход из i-го коридора, и уровень магической ауры i-го коридора
≤ft(1 ≤ u{i}, v{i} ≤ N ; 0 ≤ si ≤ 1012\right)Выходные данные:
Если Лич Сандро может получить легендарные сокровища, выведите неотрицательное целое число - минимальный уровень артефакта, который ему для этого понадобится. Если сокровища никак не получить, выведите -1 .

Решение:

Для решения задачи о том, какой минимальный уровень артефакта нужен Личу Сандро, чтобы преодолеть K коридоров в подземелье, мы можем использовать следующий подход:

Шаг 1: Понимание задачи

Сандро может начинать из любой комнаты и должен преодолеть K коридоров. Каждый коридор имеет уровень магической ауры, и Сандро должен иметь артефакт, уровень которого равен или выше уровня ауры коридора, чтобы пройти по нему.

Шаг 2: Формулировка

Нам нужно найти минимальный уровень артефакта x, такой что Сандро сможет пройти по K коридорам, уровень ауры которых не превышает x.

Шаг 3: Подход

1. Бинарный поиск: Мы можем использовать бинарный поиск по возможным уровням ауры от 0 до 1012 (максимальный уровень ауры).
2. Проверка возможности: Для каждого уровня x, который мы проверяем, мы должны определить, можем ли мы собрать K коридоров с уровнем ауры ≤ x.

Шаг 4: Реализация

1. Граф: Создаем граф, где коридоры представляют собой направленные ребра с весами (уровень ауры).
2. Поиск коридоров: Для каждого уровня x используем BFS или DFS, чтобы найти все коридоры с уровнем ауры ≤ x и подсчитать их количество.
3. Сравнение с K: Если количество коридоров ≥ K, значит, уровень x подходит, и мы можем попробовать меньший уровень. Если нет, увеличиваем уровень.

Шаг 5: Код

Если Сандро может получить сокровища, выводим минимальный уровень артефакта. Если нет, выводим -1.

Таким образом, мы реализовали алгоритм, который позволяет найти минимальный уровень артефакта, необходимый для преодоления K коридоров в подземелье.

Выбери предмет