Author: | StdAlg (adapted by T. Chistyakov, A. Klenin) | Time limit: | 2 sec | |
Input file: | input.txt | Memory limit: | 64 Mb | |
Output file: | output.txt |
For a given undirected graph with N vertices and M edges you need to figure out whether the graph is bipartite or no.
NOTE. A graph is called bipartite if it's possible to split its vertices into two non-empty sets so that there is no edges between any two vertices from the same set.
No. | Input file (input.txt ) |
Output file (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|
Автор: | std.alg | Ограничение времени: | 2 сек | |
Входной файл: | pairs.in | Ограничение памяти: | 256 Мб | |
Выходной файл: | pairs.out |
Двудольным графом называется граф (V,E), E ⊂ V × V такой, что его множество вершин V можно разбить на два подмножества A и B, для которых ∀ (e1,e2) ∈ E e1 ∈ A, e2 ∈ B и A, B ⊂ E, A ∩ B = varnothing.
Паросочетанием в двудольном графе называется любой его набор несмежных ребер, то есть такой набор S ⊂ E, что для любых двух ребер e1 = (u1, v1), e2 = (u2, v2) из S выполнено u1 ≠ u2 и v1 ≠ v2.
Ваша задача — найти максимальное паросочтание в двудольном графе, то есть паросочетание с максимально возможным числом ребер.
В первой строке записаны два целых числа n и m (1≤ n, m ≤ 250) — число вершин в A и число вершин в B.
Далее следуют n строк с описаниями ребер. i-я вершина из A описана в i+1-й строке файла. Каждая из этих строк содержит номера вершин из B, соединенных с i-й вершиной A. Вершины в A и B нумеруются независимо (с единицы). Список завершается числом 0.
Первая строка выходного файла должна содержать одно целое число l — количество ребер в максимальном паросочетании. Далее должны следовать l строк, в каждой из которых должны быть два целых числа uj и vj — концы ребер паросочетания в A и B, соотвественно.
№ | Входной файл (pairs.in ) |
Выходной файл (pairs.out ) |
---|---|---|
1 |
|
|
Автор: | A. Klenin | Ограничение времени: | 8 сек | |
Входной файл: | input.txt | Ограничение памяти: | 4 Мб | |
Выходной файл: | output.txt |
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
Автор: | std.alg | Ограничение времени: | 2 сек | |
Входной файл: | minimal.in | Ограничение памяти: | 256 Мб | |
Выходной файл: | minimal.out |
Требуется построить в двудольном графе минимальное контролирующее множество, если дано максимальное паросочетание.
В первой строке файла даны два числа m и n (1≤ m, n≤ 4 000) — размеры долей. Каждая из следующих m строк содержит список ребер, выходящих из соответствующей вершины первой доли. Этот список начинается с числа Ki (0≤ Ki≤ n) — количества ребер, после которого записаны вершины второй доли, соединенные с данной вершиной первой доли, в произвольном порядке. Сумма всех Ki во входном файле не превосходит 500 000.
Последняя строка файла содержит некоторое максимальное паросочетание в этом графе — m чисел 0≤ Li≤ n — соответствующая i-й вершине первой доли вершина второй доли, или 0, если i-я вершина первой доли не входит в паросочетание.
Первая строка содержит размер минимального контролирующего множества.
Вторая строка содержит количество вершин первой доли S, после которого записаны S чисел — номера вершин первой доли, входящих в контролирующее множество, в возрастающем порядке.
Третья строка содержит описание вершин второй доли в аналогичном формате.
№ | Входной файл (minimal.in ) |
Выходной файл (minimal.out ) |
---|---|---|
1 |
|
|