TopCoder SRM 589:GearsDiv1
public class GearsDiv1 { public int getmin(string color, string[] graph) { int N = graph.Length; int ans = int.MaxValue; string RGB = "RGB"; foreach (var c in RGB) { foreach (var c2 in RGB) { if (c == c2) continue; BipartiteMatching bm = new BipartiteMatching(N, N); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (graph[i][j] == 'Y' && color[i] == c && color[j] == c2) { bm.AddEdge(i, j); } } } ans = Math.Min(ans, bm.GetMatchNumber()); } } return ans; } }