192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943

Задача на теорию графов

19.08.2017, 10:06. Показов 13472. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Светофорчики
В подземелье M тоннелей и N перекрестков, каждый тоннель соединяет какие-то два перекрестка. Мышиный король решил поставить по светофору в каждом тоннеле перед каждым перекрестком. Напишите программу, которая посчитает, сколько светофоров должно быть установлено на каждом из перекрестков. Перекрестки пронумерованы числами от 1 до N.

Входные данные

Во входном файле INPUT.TXT записано два числа N и M (0 < N ≤ 100, 0 ≤ M ≤ N*(N-1)/2). В следующих M строках записаны по два числа i и j (1 ≤ i,j ≤ N), которые означают, что перекрестки i и j соединены тоннелем. Можно считать, что любые два перекрестка соединены не более, чем одним тоннелем. Нет тоннелей от перекрестка i до него самого.

Выходные данные

В выходной файл OUTPUT.TXT вывести N чисел: k-ое число означает количество светофоров на k-ом перекрестке.

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
INPUT.TXT                      OUTPUT.TXT
7 10                          3 3 2 2 5 2 3
5 1
3 2
7 1
5 2
7 4
6 5
6 4
7 5
2 1
5 3
Раньше не решал задачи на графы. Объясните пожалуйста решение, как эта задача решается с помощью графов
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.08.2017, 10:06
Ответы с готовыми решениями:

Задача на теорию автоматов
Условие во вложение. Не совсем понимаю алгоритм. Есть какие-нибудь идеи?

Задача на теорию чисел
Торт от Толи Толя на день рождения собирается угостить друзей тортом. Известно, что на дне рождения может быть либо N, либо M человек,...

Задача на программирование и теорию вероятностей
Требуется написать фрагмент тела функции, который присваивает переменным a, b и c такие случайные целые значения, которые удовлетворяют...

10
354 / 135 / 28
Регистрация: 16.12.2012
Сообщений: 607
Записей в блоге: 1
19.08.2017, 11:07
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>
 
using namespace std;
int main() {
    int n, m;
    cin >> n >> m;
    vector<vector<int>> v(n);
    for(int i = 0; i < m; i++) {
        int a, b;
        cin >> a >> b;
        a--;b--;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    for(int i = 0; i < n; i++) {
        cout << v[i].size() << " ";
    }
    return 0;
}
Можно не хранить вершины. А просто v[a]++; v[b]++;
1
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
19.08.2017, 13:08  [ТС]
А можно взять массив двумерный размером mas[N][N] и mas[a][b] делать +1?

Добавлено через 54 минуты
А почему M <= n * (n - 1) / 2, разве n / 2 не будет?
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
19.08.2017, 16:14
Цитата Сообщение от no swear Посмотреть сообщение
А можно взять массив двумерный размером mas[N][N] и mas[a][b] делать +1?
Можно. Но когда вершин очень много это по памяти слишком затратно.
Цитата Сообщение от no swear Посмотреть сообщение
А почему M <= n * (n - 1) / 2, разве n / 2 не будет?
Представьте что в графе между каждыми двумя вершинами есть ребро. Сколько ребер?
Есть ребро 1-2, 1-3, ... 1-n; 2-1, 2-3, ... 2-n В общем для каждой из n вершин n-1 ребро, но мы не учли то что 1-2 и 2-1 это одинаковое ребро, потому n * (n-1) / 2
1
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
19.08.2017, 19:30  [ТС]
Как вообще можно представить эту задачу? Ну вот у нас есть 7 перекрестков как в примере и 10 тоннелей, дальше N строк с числами какой перекресток(вершина) с каким перекрестком(вершиной) связан. Дальше что делать? Я пробовал по своему методу написать но не получилось а смысл кода выше я не очень понял
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
20.08.2017, 18:38
Лучший ответ Сообщение было отмечено no swear как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <vector>
 
 
int main() {
    int N;
    std::cin >> N;
    std::vector<int> vec(N);
 
    int M;
    std::cin >> M;
    for (int i = 0; i < 2 * M; ++i) {
        int node;
        std::cin >> node;
        ++vec[node - 1];
    }
 
    for (int i = 0; i < N; i++)
        std::cout << vec[i] << " ";
    std::cout << std::endl;
}
2
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
20.08.2017, 19:53  [ТС]
Цитата Сообщение от avgoor Посмотреть сообщение
C++
1
++vec[node - 1];
Почему вы вводимое число уменьшаете на 1?
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
20.08.2017, 19:57
no swear, потому, что номер перекрестка начинается с 1, а индекс вектора с 0.
1
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
21.08.2017, 07:00  [ТС]
А если бы задавались не по два перекрестка а по три(cin >> a >> b >> c)?
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
21.08.2017, 19:08
no swear, тогда это был бы не граф, а хзч. Но, в этом случае вместо 2 * M в условии цикла было бы... догадайтесь.
1
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
21.08.2017, 20:06  [ТС]
Ну если мы вводим как в последнем коде через одну переменную (cin >> node) то явно будет 3 * M

Спасибо большое за то что помогли разобраться с этой задачей, ОЧЕНЬ вам благодарен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.08.2017, 20:06
Помогаю со студенческими работами здесь

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

Теория графов. Задача Обрати меня!
Мальчик Вася очень любит разворачивать ориентированные графы. Помогите ему в этом. Входные данные Во входном файле записано число N...

Теорие графов. Композиция двух неор. графов.
Здравствуйте. Прошу помощи уже здесь :| (old topic)... Прошу помочь с составлением алгоритма &quot;Композиции двух неориентированных...

Кто понимает теорию графов? Для вас может эта задача разминка для мозга
Не понимаю как понять это.. Удалил вложение

Как можно практически применить теорию случайных графов?
Не даёт мне спать один вопрос : как на практике можно применить теорию случайных графов? В Unity3D создать социум или пищевую цепочку, или...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru