В
Все
Б
Биология
Б
Беларуская мова
У
Українська мова
А
Алгебра
Р
Русский язык
О
ОБЖ
И
История
Ф
Физика
Қ
Қазақ тiлi
О
Окружающий мир
Э
Экономика
Н
Немецкий язык
Х
Химия
П
Право
П
Психология
Д
Другие предметы
Л
Литература
Г
География
Ф
Французский язык
М
Математика
М
Музыка
А
Английский язык
М
МХК
У
Українська література
И
Информатика
О
Обществознание
Г
Геометрия
azalinasabirova
azalinasabirova
09.02.2021 05:41 •  Информатика

Минималистичная игра Вы играете в компьютерную игру. В этой игре есть n уровней. Изначально у вас открыт один уровень с номером 1. Для каждого уровня задан упорядоченный набор напрямую зависимых от него уровней. Уровень a называется косвенно зависимым от b, если либо a напрямую зависит от b, либо a косвенно зависит от одного из уровней, который напрямую зависит от b. Гарантируется, что каждый уровень косвенно зависим от первого, а также все уровни, кроме первого, зависимы напрямую от ровно одного другого уровня. Более формально, уровни представляют корневое дерево, с корнем - уровнем 1. При прохождении уровня i открывается первый уровень из набора напрямую зависимых от i уровней, после прохождения первого уровня и всех косвенно зависимых от него уровней открывается второй и так далее. Таким образом мы выполним все уровни. Более формально выполняется левый обход дерева, где самый левый сын - первый в списке. Для лучшего понимания посмотрите секцию с примечаниями.

У вас есть чит-код, который позволяет сделать не более k изменений. За одно изменение можно выбрать вершину, и поменять местами две соседних в наборе зависимых от нее вершин. Вам нужно сделать порядок посещения вершин минимально лексикографически возможным. Первый порядок лексикографически меньше второго, если для какого-то t (1 ≤ t ≤ n - 1) первые t уровней в порядках совпадают, а t + 1 уровень меньше в первом порядке.

Формат входных данных
В первой строке вводятся два целых числа n и k - количество уровней и ограничение на количество изменений (1 ≤ n ≤ 5 * 105, 0 ≤ k ≤ 1012).

В последующих n строках идет описание уровней. На i-й строке сначала вводится целое число ti (0 ≤ ti ≤ n - 1) - количество уровней напрямую зависимых от i-го, после чего вводится ti целых чисел - номера уровней напрямую зависимых от i-го.

Формат результата
Выведите n чисел - минимальный лексикографически возможный порядок после не более чем k изменений.

Примеры
Входные данные
5 1
2 3 2
2 5 4
0
0
0
Результат работы
1 2 5 4 3
Входные данные
5 2
2 3 2
2 5 4
0
0
0
Результат работы
1 2 4 5 3
Входные данные
5 4
4 5 3 2 4
0
0
0
0
Результат работы
1 2 3 4 5
Примечания
Система оценки:

Решения, работающие при n ≤ 10, будут набирать не менее 10% .

Решения, работающие, когда от каждого уровня напрямую зависит не более двух других уровней, будут набирать не менее 25% .

Решения, работающие при n ≤ 5000, будут получать не менее 30% .

Решения, работающие, когда все уровни напрямую зависимы от первого, будут получать не менее 35% .

Решения, работающие, когда от каждого уровня напрямую зависит не более десяти других уровней, будут набирать не менее 50% .

Решения, работающие при n ≤ 200000, будут получать не менее 65% .

Разбор примеров:
Зависимости уровней в первом и втором тесте из условия не отличаются, отличаются лишь значения k. Изначальный обход дерева выглядит следующим образом: 1 3 2 5 4.

Рисунок снизу соответствует одному изменению в первом примере

После этого изменения порядок посещения станет: 1 2 5 4 3.

Рисунок снизу соответствует второму изменения во втором примере

После этого изменения порядок посещения станет: 1 2 4 5 3. Можно показать, что порядок обхода лексикографичски меньше этого нельзя получить ни за какое количество действий.

Показать ответ
Ответ:
Гaяз
Гaяз
08.08.2021 13:19
Как-то так
#include <iostream>
using namespace std;
int main(){    cout << "Vvedute kol-vo ocenok" << endl;
    int n,i,a,Four,Five;    n = i = a = Four = Five = 0;
    cin >> n;
    for (i = 1; i <= n; i++)    {        cin >> a;        if (a == 4){         Four++;}  else if (a == 5)      {         Five++;      }    }    if (Four > Five){   cout << "Four" << endl;} else if (Five > Four)      {   cout << "Five" << endl;      }      else      {         cout << "Equal"<< endl;      }      cout << "Kol-vo 4: " << Four << " Kol-vo 5: " << Five << endl;    return 0;}
0,0(0 оценок)
Ответ:
dinamur03
dinamur03
10.05.2023 01:34
Код#include <iostream>constexpr double bites_to_megabytes(double a) {    return a / 8388608;}constexpr double megabytes_to_gigabytes(double a) {    return a / 1024;}int main() {    long long a;    short type;    bool is_correct = false;    double answer;    do {        std::cin >> a;        std::cout << "[1] Megabytes \n"                  << "[2] Gigabytes \n"                  << "Convert to [1] or [2]: ";        std::cin >> type;        if (type == 1 or type == 2) {            is_correct = true;        } else {            std::cout << "Meh. Try to type again. \n" << std:: endl;        }    } while (!is_correct);    switch (type) {        case 1:            answer = bites_to_megabytes(a);            break;        case 2:            answer = megabytes_to_gigabytes(bites_to_megabytes(a));            break;    }    std::cout << "An answer of conversion is " << answer << std::endl;    return 0;}
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота