C♯の勉強

C♯4.0 で TopCoder の過去問を解きます。

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;
    }
}