private static FlowGraph ReadGraph(IReadOnlyList <bool[]> bipartiteGraph) { var n = bipartiteGraph.Count; var m = bipartiteGraph[0].Length; var vertexCount = n + m + 2; var graph = new FlowGraph(vertexCount); for (var i = 0; i < n; i++) { graph.AddEdge(0, i + 1, 1); } for (var i = 0; i < m; i++) { graph.AddEdge(n + 1 + i, n + m + 1, 1); } for (var i = 0; i < n; i++) { for (var j = 0; j < m; j++) { if (!bipartiteGraph[i][j]) { continue; } graph.AddEdge(i + 1, n + 1 + j, 1); } } return(graph); }
private static void Main(string[] args) { var firstLine = Console.ReadLine().Split(); var n = int.Parse(firstLine[0]); var m = int.Parse(firstLine[1]); var graph = new FlowGraph(n); for (var i = 0; i < m; i++) { var input = Console.ReadLine().Split(); var from = int.Parse(input[0]) - 1; var to = int.Parse(input[1]) - 1; var capacity = int.Parse(input[2]); graph.AddEdge(from, to, capacity); } Console.WriteLine(MaxFlow(graph)); Console.ReadKey(); }