Задача Паросочетание

Файл входного файла: pair.in
Файл выходного файла: pair.out
Ограничение по памяти: 64 MB
Ограничение по времени: 1 s

Описание

Граф называется двудольным, если его множество вершин V можно разбить на два непересекающихся множества вершин A и B, так чтобы концы любого ребра в этом графе находились в разных множествах. Паросочетанием в графе называется подмножество S множества ребер E этого графа, не имеющих общих вершин (для любых ребер e1 = (u1, v1) и e2 = (u2, v2), лежащих в S, выполнено u1 != u2, u1 != v2, v1 != u2 и v1 != v2). Ваша задача – найти максимальное паросочетание в заданном двудольном графе.

Максимальным называется паросочетание, состоящее из максимального количества ребер.

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

Первая строка входного файла содержит два целых числа N и M (1 <= N,M <= 250) - количество вершин во множествах A и B соответственно. Следующие N строк содержат описания ребер графа. В (i + 1)-й строке содержится список вершин множества B, соединенных с i-й вершиной множества A. Список оканчивается числом 0. Нумерация вершин в множествах A и B независимая (вершины нумеруются c 1).

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

Первая строка выходного файла должна содержать одно целое число L – количество ребер в максимальном паросочетании. Каждая из следующих L строк должна содержать описание одного ребра паросочетания – два целых числа ui и vi (номер вершины в множестве A и номер вершины в множестве B).

Примеры:

ввод вывод

2 2
1 2 0
2 0

2
1 1
2 2

Added: admin
Difficulty: 0.651385651386
Accepted: 11
Submitted: 20
Analyze this Discuss

Обсуждение:

Начать обсуждение:

Powered by django, eJudge.