Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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();
        }