Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/55: Рейтинг темы: голосов - 55, средняя оценка - 4.91
5 / 5 / 0
Регистрация: 20.10.2020
Сообщений: 53

Задача E. Прогулка по мостам 2

29.10.2020, 16:09. Показов 11454. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возможно вы знаете историю про то, как Эйлер гулял по мостам Кёнигсберга. Допустим теперь, что Эйлер попал на некий архипелаг, между некоторыми островами которого имеются мосты. Мосты построены таким образом, что между любыми двумя островами архипелага можно построить путь по этим мостам, причем этот путь единственный. Все острова пронумерованы от 1 до n. Эйлер находится на острове номер 1 и желает совершить следующую прогулку: с острова номер 1 он хочет дойти до острова номер 2, далее до острова номер 3 и так далее до острова номер n. С него он хочет вернуться на остров номер 1. Он прекрасно понимает, что при этом ему придётся посещать некоторые мосты по многу раз. У каждого моста есть смотритель. Одного из них заинтересовало сколько раз по его мосту пройдёт Эйлер.

Формат входных данных

В первой строке содержится два числа через пробел - n - количество островов в архипелаге, 2≤n≤10^5 и b — номер моста, для которого нужно узнать сколько раз по нему проходит указанный маршрут. В следующих n−1 строках содержатся по два числа a_i и b_i, через пробел - номера островов, соединённых мостом, 1 ≤ a_i, b_i ≤ n, a_i != b_i. Мосты нумеруются в порядке появления во входных данных, начиная с 1. Гарантируется, что между любыми двумя островами архипелага можно построить путь по этим мостам, причем этот путь единственный.

Формат выходных данных

Вывести одно число - ответ на задачу.

Господа и дамы, буду рад любой помощи с задачей!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.10.2020, 16:09
Ответы с готовыми решениями:

Прогулка по мостам
Задача E1. Прогулка по мостам Возможно вы знаете историю про то, как Эйлер гулял по мостам Кёнигсберга. Допустим теперь, что Эйлер...

Прогулка на катере
С семьей едем отдыхать в Одессу. Хотим покатать ребенка на катере. Может кто подскажет где и как это возможно, и сколько стоит.

Вечерняя прогулка
То вы прогуливались по вечернем Львову и рассматривали разнообразные вывески и витрины магазинов. Между другого, вы увидели интересные...

24
2 / 2 / 0
Регистрация: 27.10.2020
Сообщений: 8
30.10.2020, 21:11
Студворк — интернет-сервис помощи студентам
спасибо
понял

Добавлено через 28 секунд
я просто не разбираюсь вообще в c++
я учу питон, но на нем смог написать
0
0 / 0 / 0
Регистрация: 21.10.2020
Сообщений: 4
30.10.2020, 21:15
Romiusse, Уже дописываю, спасибо за идею)))
0
0 / 0 / 0
Регистрация: 30.10.2020
Сообщений: 3
30.10.2020, 23:15
Romiusse, по времени всё нормально, прошло? Прост то ли я туплю, то ли так и должно быть, даже тестовый валит по времени
0
20 / 19 / 2
Регистрация: 19.06.2019
Сообщений: 45
30.10.2020, 23:39
al1981, Асимптотика моего решения n log n. Там все норм по времени должно быть. скинте решение, я чекну
0
12 / 12 / 0
Регистрация: 28.11.2019
Сообщений: 11
31.10.2020, 10:43
можете помочь с моим кодом он неправильно отвечает на тест:
8 1
5 8
1 3
8 6
7 5
2 8
1 5
4 5
должен выводить 6 а выводит 3

заранее спасибо

Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <vector>
 
using namespace std;
 
int depth_min = 1000001;
vector<vector<int>> sp(0);
int cnt = 0;
 
void dfs(int v, int x, vector<bool> chek, int b1, int b2, int depth = 0, int count = 0) {
    chek[v] = true;
    if (depth < depth_min && v == x) {
        depth_min = depth;
        cnt = count;
    }
    for (int i = 0; i < sp[v].size(); i++) {
        int to = sp[v][i];
        if (!chek[to]) {
            if ((b1 == to && b2 == v) || (b2 == to && b1 == v)) {
                count++;
            }
            dfs(to, x, chek, b1, b2, depth + 1, count);
        }
    }
}
 
int main() {
    int n, sumx = 0, x, y, b1, b2, b;
    cin >> n >> b;
    vector<bool> chek(n, false);
    sp.resize(n, vector<int>(0));
    for (int i = 0; i < n - 1; ++i) {
        cin >> x;
        cin >> y;
        if (i == b) {
            b1 = x - 1;
            b2 = y - 1;
        }
        sp[x - 1].push_back(y - 1);
        sp[y - 1].push_back(x - 1);
    }
    for (int i = 1; i < n; ++i) {
        depth_min = 99999999;
        dfs(i - 1, i, chek, b1, b2);
        sumx += cnt;
    }
    depth_min = 99999999;
    dfs(n - 1, 0, chek, b1, b2);
    cout << sumx << endl;
}
Добавлено через 33 минуты
Romiusse
можете помочь с моим кодом он неправильно отвечает на тест:
8 1
5 8
1 3
8 6
7 5
2 8
1 5
4 5
должен выводить 6 а выводит 3

заранее спасибо

Коду меня граф хранится в виде списка смежности)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <vector>
 
using namespace std;
 
int depth_min = 1000001;
vector<vector<int>> sp(0);
int cnt = 0;
 
void dfs(int v, int x, vector<bool> chek, int b1, int b2, int depth = 0, int count = 0) {
    chek[v] = true;
    if (depth < depth_min && v == x) {
        depth_min = depth;
        cnt = count;
    }
    for (int i = 0; i < sp[v].size(); i++) {
        int to = sp[v][i];
        if (!chek[to]) {
            if ((b1 == to && b2 == v) || (b2 == to && b1 == v)) {
                count++;
            }
            dfs(to, x, chek, b1, b2, depth + 1, count);
        }
    }
}
 
int main() {
    int n, sumx = 0, x, y, b1, b2, b;
    cin >> n >> b;
    vector<bool> chek(n, false);
    sp.resize(n, vector<int>(0));
    for (int i = 0; i < n - 1; ++i) {
        cin >> x;
        cin >> y;
        if (i == b) {
            b1 = x - 1;
            b2 = y - 1;
        }
        sp[x - 1].push_back(y - 1);
        sp[y - 1].push_back(x - 1);
    }
    for (int i = 1; i < n; ++i) {
        depth_min = 99999999;
        dfs(i - 1, i, chek, b1, b2);
        sumx += cnt;
    }
    depth_min = 99999999;
    dfs(n - 1, 0, chek, b1, b2);
    cout << sumx << endl;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.10.2020, 10:43

Создание не большой локации и прогулка по ней
Приветствую всех профессионалов и любителей. Сразу скажу, в области 3D моделирования сам даже не любитель. Но возникла задача, и хотелось...

Олимпиадная задача по программированию. PascalABC.NET. Задача L. Переключение между окнами
Когда пользователь работает в операционной системе Winux, у него часто запущено несколько приложений. Каждое из приложений работает в...

Васильев C# Глава 8 задача 2 (Просьба объяснить формулировку(задача внутри)
Текст задачи Написать программу , в которой есть класс с полем, являющимся ссылкой на одномерный целочисленный массив. У класса есть...

Васильев C# Глава 7 задача 8 (Просьба объяснить формулировку(задача внутри)
Текст задачи Напишите программу с классом, у которого есть текстовое поле. Значение текстовому полю присваивается при создании объекта...

В некотором государстве ввели компьютерный паспорт гражданина. Укажите пол гражданина и последовательность событий
Доброго времени суток,форумчане. Хотелось бы попросить помощи в решении одной задачи от умных голов. Задача: В некотором...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru