|
0 / 0 / 0
Регистрация: 20.08.2017
Сообщений: 3
|
||||||
Эйлеров путь. Не проходит по времени20.08.2017, 00:35. Показов 1729. Ответов 4
Метки нет (Все метки)
Доброго времени суток!
Хочу обратиться за помощью. Решаю сейчас задачу, и тестирование не проходит по времени. Идея, как я считаю, отличная, но почему-то не проходит по времени, не могу понять из-за чего проблема. Условие, идею и мой код смотрите ниже. Условие задачи: История Принцессы ограничение по времени на тест: 2.0 с ограничение по памяти на тест: 256 МБ Я нашёл Принцессу в подвале таверны, как и ожидал. После того, как она сделала ставки на турнир, мы поднялись наверх пропустить по стаканчику виски. Я надеялся выведать информацию о Драконе, ведь Принцесса в своё время частенько заходила к нему на Чай. Принцесса была непростой женщиной, и иметь с ней дело было крайне опасно. Как-то она по очереди встречалась с принцами, стараясь ради забавы перессорить их всех. Если Принцесса уходила от одного принца и начинала сразу же встречаться с его другом, то после этого они переставали быть друзьями. Со стороны было заметно, что она делает это специально: она перессорила всех друзей за минимальное количество переходов. Под звуки голоса Принцессы я чувствовал, как тьма из углов таверны расползается и покрывает всё вокруг. Чувство реальности покидало меня. Не надо быть Добрым Волшебником, чтобы догадаться, что она подсыпала что-то мне в стакан. Пламя жизни внутри меня угасало, я провалился во тьму. Как ловко она перессорила тех принцев. Как же она это сделала? Никогда не пейте виски с Принцессой. Входные данные В первой строке записаны два целых числа через пробел: n и m (2 ≤ n ≤ 10^5, 1 ≤ m ≤ 2·10^5) — количество принцев и количество пар друзей среди них соответственно. Далее в m строках через пробел записаны пары целых чисел ai и bi (1 ≤ ai < bi ≤ n) — пары номеров принцев, являющихся друзьями. Принцы нумеруются с единицы. Каждая пара представлена не более одного раза. Выходные данные В первой строке выведите единственное целое число k — минимальное количество принцев, с которыми должна последовательно встречаться Принцесса, чтобы перессорить всех друзей. Во второй строке выведите k целых чисел через пробел — номера принцев в том порядке, в котором Принцесса должна с ними встречаться. Если ответов несколько, выведите любой из них. Примеры: входные данные 9 5 2 4 2 6 3 5 3 9 5 9 выходные данные 7 3 9 5 3 6 2 4 входные данные 4 5 1 2 1 3 1 4 2 4 3 4 выходные данные 6 4 3 1 4 2 1 Идея решения: Здесь может быть несколько компонент связанностей, будем обрабатывать каждую по отдельности. Предварительно при чтении посчитаем степень каждой вершины (то есть количество рёбер, которые есть у этой вершины (рёбра неориентированные)). Затем при обработке очередной компоненты мы будем искать в ней эйлеров путь. Если вершин с нечётной степенью будет больше 2, то между любыми 2 вершинами с нечётной степенью создадим ребро. Будем так делать, пока у нас не останется 2 вершины с нечётной степенью (ведь вершин с нечётной степенью будет всегда чётное количество, да?). Затем запустим поиск эйлерова пути из вершины с нечётной степенью (если такие есть, если нет, то с любой) и после того как путь будет найден и записан в стэк, будем искать следующую компоненту. Ну, собственно вроде и всё, ниже код с комментариями.
Работать должно вроде бы быстро, не могу понять из-за чего всё же оно не пашет(( Всем заранее спасибо за любую помощь!
0
|
||||||
| 20.08.2017, 00:35 | |
|
Ответы с готовыми решениями:
4
Эйлеров путь
Clojure Эйлеров путь на графах |
|
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
|
|
| 20.08.2017, 07:09 | |
|
откуда в в 1-м примере бл..во
3->6 ?
0
|
|
|
0 / 0 / 0
Регистрация: 20.08.2017
Сообщений: 3
|
|
| 20.08.2017, 11:39 [ТС] | |
|
первая компонетна состоит из 3 вершин 3 9 5, 2 компонента состоит тоже из 3 вершин 6 2 4. Мы просто находим путь в первой и потом путь во второй и записываем эти пути в ответ. Наша задача здесь "уничтожить все связи(рёбра)".
0
|
|
|
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
|
|
| 20.08.2017, 11:46 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 20.08.2017
Сообщений: 3
|
||||||
| 20.08.2017, 14:19 [ТС] | ||||||
|
Никак, всмысле что ребра нету, мы просто перешли. Мы нашли путь в одной компоненте и просто перешли в другую, нам нужно просто убрать все рёбра, мы можем в любой момент времени перейти в любую вершину, но не факт что рёбра уберуться за минимальное количество вершин в которых мы побывали, поэтому я рассматриваю компоненты, когда уже удалил все рёбра в этой компоненте, иду в следующую.
Добавлено через 2 часа 5 минут Всё задачу решил. Место хранения графа в векторе перевёл всё в set, могут быть случаи когда рёбер очень много а вершин не сильно и я постоянно буду от каждой вершины смотреть все рёбра и это долго, а так буду просто брать первое за log.
0
|
||||||
| 20.08.2017, 14:19 | |
|
Помогаю со студенческими работами здесь
5
Путь который проходит сообщение ICQ Какой путь проходит материальная точка за период?
Оптимизация, алгоритм не проходит по времени
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|