помоги мне решить задачу по алгоритмам и структура...
Creado el: 24 de octubre de 2025
Respondido usando GPT-5 Thinking por Chat01
Creado el: 24 de octubre de 2025
Respondido usando GPT-5 Thinking por Chat01
помоги мне решить задачу по алгоритмам и структурам данных на языке программирования C++
напиши примитивное решение! также пиши код в моём стиле: не используй using namespace std; используй стандартные include (не используй «#include <bits/stdc++.h>»); без сильной необходимости не используй глобальные переменные (все переменные должны быть в main); требования к названиям переменных: названия переменных должны быть развёрнутыми (так чтобы было понятно что в них хранится и какой смысл они несут), но сильно длинными названия переменных не делай, названия пиши без заглавных букв, если в названии используются несколько слов, то разделяй их нижним подчёркиванием («_»); не используй болшие классы и сруктуры с различными методами (для удобства можно использовать только маленькие классы и структуры); в коде обязательно должна присутствовать отдельная функция (функции), в которой (которых) происходит основное решение задачи, возможно наличие вспомогательных функций (то есть весь код не должен быть написан в main, в main напиши считывание входных данных и «подготовку» к решению); не используй лямбда-функции, вместо них пиши отдельные функции; весь код пиши под версию C++20, не использую без сильной необходимости старый стиль написания кода и старые
ниже — простая проверка, что заданная матрица является потоком в сети с истоком и стоком .
Проверяем три условия:
cpp#include <iostream> #include <vector> bool check_capacity_constraints(const std::vector<std::vector<long long>>& capacities, const std::vector<std::vector<long long>>& flows) { int vertex_count = static_cast<int>(capacities.size()); for (int from_vertex = 0; from_vertex < vertex_count; ++from_vertex) { for (int to_vertex = 0; to_vertex < vertex_count; ++to_vertex) { if (flows[from_vertex][to_vertex] > capacities[from_vertex][to_vertex]) { return false; } } } return true; } bool check_antisymmetry(const std::vector<std::vector<long long>>& flows) { int vertex_count = static_cast<int>(flows.size()); for (int u = 0; u < vertex_count; ++u) { for (int v = 0; v < vertex_count; ++v) { if (flows[u][v] != -flows[v][u]) { return false; } } } return true; } bool check_conservation(const std::vector<std::vector<long long>>& flows, int source_vertex_index, int sink_vertex_index) { int vertex_count = static_cast<int>(flows.size()); for (int u = 0; u < vertex_count; ++u) { if (u == source_vertex_index || u == sink_vertex_index) { continue; } long long balance_sum = 0; for (int v = 0; v < vertex_count; ++v) { balance_sum += flows[u][v]; } if (balance_sum != 0) { return false; } } return true; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int vertex_count; if (!(std::cin >> vertex_count)) { return 0; } std::vector<std::vector<long long>> capacities(vertex_count, std::vector<long long>(vertex_count)); for (int i = 0; i < vertex_count; ++i) { for (int j = 0; j < vertex_count; ++j) { std::cin >> capacities[i][j]; } } // в условии после матрицы c идет пустая строка — оператор >> её пропустит std::vector<std::vector<long long>> flows(vertex_count, std::vector<long long>(vertex_count)); for (int i = 0; i < vertex_count; ++i) { for (int j = 0; j < vertex_count; ++j) { std::cin >> flows[i][j]; } } int source_vertex_index = 0; // вершина 1 в условии int sink_vertex_index = vertex_count - 1; // вершина N в условии bool ok = check_capacity_constraints(capacities, flows) && check_antisymmetry(flows) && check_conservation(flows, source_vertex_index, sink_vertex_index); std::cout << (ok ? "YES" : "NO") << '\n'; return 0; }
Алгоритм работает за по числу вершин и укладывается в ограничения.