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

Проверка графа на двудольность

15.07.2024, 00:55. Показов 6809. Ответов 41

Студворк — интернет-сервис помощи студентам
Нужно решить олимпиадную задачу "Проверка на двудольность"
Пытался решить эту задачу, выдает wa5, не могу понять, в чем может быть проблема
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include<bits/stdc++.h>
#define int long long
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("fast-math")
 
using namespace std;
 
vector<int> parent, rank_;
 
int find(int u) {
    if (u != parent[u])
        parent[u] = find(parent[u]);
    return parent[u];
}
 
void union_sets(int u, int v) {
    u = find(u);
    v = find(v);
    if (u != v) {
        if (rank_[u] < rank_[v])
            swap(u, v);
        parent[v] = u;
        if (rank_[u] == rank_[v])
            rank_[u]++;
    }
}
 
signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
 
    int n, m;
    cin >> n >> m;
 
    parent.resize(n + 1);
    rank_.resize(n + 1, 0);
    for (int i = 1; i <= n; ++i)
        parent[i] = i;
 
    vector<int> color(n + 1, -1);
    bool is_bipartite = true;
 
    for (int i = 0; i < m; ++i) {
        int u, v;
        cin >> u >> v;
 
        if (find(u) == find(v)) {
            if (color[u] == color[v]) {
                is_bipartite = false;
            }
        } else {
            union_sets(u, v);
            if (color[u] == -1 && color[v] == -1) {
                color[u] = 0;
                color[v] = 1;
            } else if (color[u] == -1) {
                color[u] = 1 - color[v];
            } else if (color[v] == -1) {
                color[v] = 1 - color[u];
            } else if (color[u] == color[v]) {
                is_bipartite = false;
            }
        }
 
        cout << is_bipartite;
    }
 
    cout << endl;
    return 0;
}
ЗАДАЧА:
В неориентированный граф последовательно добавляются новые ребра. Изначально граф пустой. После каждого добавления нужно говорить, является ли текущий граф двудольным.
Входные данные:
На первой строке n — количество вершин, m— количество операций «добавить ребро». Следующие m строк содержат пары чисел от 1 до n — описание добавляемых ребер.
Выходные данные:
Выведите в строчку m нулей и единиц. i-й символ должен быть равен единице, если граф, состоящий из первых i ребер, является двудольным.
Пример входных данных:
3 3
1 2
2 3
3 1
Тогда выход:
110
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.07.2024, 00:55
Ответы с готовыми решениями:

Для графа определить его двудольность и вывести обе доли (исправить программу)
помогите исправить программу! запускается, на файл вывода пуст... а когда раскоментирываю - не компилруется... вот код: #include...

Проверка на двудольность
Граф является двудольным,если у него нет циклов нечетной длины,проще говоря если мы раскрасим стартовую вершинку,например,в...

Проверка на неориентированность графа
По заданной квадратной матрице n×n из нулей и единиц определить, может ли она быть матрицей смежности простого неориентированного графа....

41
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
17.07.2024, 19:51
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вершины каждой связной компоненты представляются в виде parent pointer tree. При поиске корня дерева выполняется сжатие путей по стратегии path halving.
Какая глупость, зачем хранить граф ?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13215 / 6847 / 1826
Регистрация: 18.10.2014
Сообщений: 17,347
17.07.2024, 20:25
Цитата Сообщение от SmallEvil Посмотреть сообщение
Какая глупость, зачем хранить граф ?
Что за невероятнейшую феерическую дичь вы постоянно несете? Где вам померещилось "хранение графа"? В моей реализации хранится только массив элементов, размер которого равен n - количество вершин. Самого графа у меня нигде не хранится. Это не нужно.

Все решения задачи, разумеется, будут хранить O(n) элементов. Без этого решение невозможно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.07.2024, 20:25

Проверка графа-дерева
Неориентированный граф без петель и кратных ребер задан матрицей смежности. Требуется определить, является ли этот граф деревом. Входные...

Проверка на связанность графа
Всем Привет. Я получил задание проверить связанный ли граф , у меня имеется матрица смежности (adjacency matri) ,а также написаны и...

Проверка графа с односторонними рёбрами
В стране имеется N городов и М дорог между ними. Все дороги в стране имеют только одну полосу, поэтому передвигаться по ним можно только в...

Проверка на смежность вершин графа
Создаю граф, для него матрицу смежности (1 - есть ребро, 0 - нет). Потом должна быть проверка на смежность вершин. Если хотя бы две вершины...

Двудольность графа
Требуется проверить граф на двудольность методом поиска в глубину либо в ширину на С++ Опишите, пожалуйста, алгоритм по шагам


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

Или воспользуйтесь поиском по форуму:
42
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru