結果

問題 No.241 出席番号(1)
ユーザー eitaho
提出日時 2015-07-10 22:39:05
言語 C#
(csc 2.8.2.62916)
結果
AC  
実行時間 47 ms
コード長 3,617 Byte
コンパイル時間 2,968 ms
使用メモリ 17,808 KB
最終ジャッジ日時 2019-02-23 18:17:25

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
99_system_test1.txt AC 42 ms
17,800 KB
99_system_test2.txt AC 42 ms
17,788 KB
99_system_test3.txt AC 47 ms
15,752 KB
99_system_test4.txt AC 40 ms
13,720 KB
99_system_test5.txt AC 44 ms
15,744 KB
99_system_test6.txt AC 44 ms
17,788 KB
99_system_test7.txt AC 43 ms
15,748 KB
99_system_test8.txt AC 41 ms
15,736 KB
challenge01.txt AC 41 ms
13,720 KB
challenge02.txt AC 43 ms
15,748 KB
sample1.txt AC 40 ms
13,708 KB
sample2.txt AC 41 ms
17,796 KB
sample3.txt AC 40 ms
13,724 KB
system_test1.txt AC 43 ms
17,800 KB
system_test2.txt AC 43 ms
15,752 KB
system_test3.txt AC 39 ms
13,736 KB
test1.txt AC 39 ms
17,780 KB
test2.txt AC 39 ms
13,704 KB
test3.txt AC 40 ms
17,800 KB
test4.txt AC 38 ms
15,756 KB
test5.txt AC 39 ms
15,748 KB
test6.txt AC 39 ms
15,748 KB
test7.txt AC 38 ms
13,708 KB
test8.txt AC 39 ms
17,792 KB
test9.txt AC 40 ms
13,724 KB
test10.txt AC 39 ms
13,712 KB
test11.txt AC 39 ms
13,716 KB
test12.txt AC 40 ms
15,752 KB
test13.txt AC 40 ms
15,748 KB
test14.txt AC 40 ms
17,808 KB
test15.txt AC 41 ms
17,804 KB
test16.txt AC 41 ms
13,712 KB
テストケース一括ダウンロード
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 2.8.2.62916 (2ad4aabc)
Copyright (C) Microsoft Corporation. All rights reserved.

ソースコード

diff #
using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Collections.Generic;
using System.Diagnostics;
using System.Numerics;
using Enu = System.Linq.Enumerable;

class Program
{
    public void Solve()
    {
        int N = Reader.Int();
        var Bad = Reader.IntArray(N);
        var matching = new BipartiteMatching(N * 2);

        for (int i = 0; i < N; i++)
            for (int d = 0; d < N; d++)
                if (d != Bad[i])
                    matching.AddEdge(i, N + d);
        int x = matching.Run();
        if (x < N)
            Console.WriteLine(-1);
        else
            for (int i = 0; i < N; i++)
                Console.WriteLine(matching.match[i] - N);
    }


    class BipartiteMatching
    {
        int V;
        List<int>[] G;
        public int[] match;
        bool[] seen;

        public BipartiteMatching(int V)
        {
            this.V = V;
            G = Enumerable.Range(0, V).Select(i => new List<int>()).ToArray();
            match = Enumerable.Repeat(-1, V).ToArray();
        }
        public void AddEdge(int a, int b)
        {
            G[a].Add(b);
            G[b].Add(a);
        }
        public int Run()
        {
            int res = 0;
            for (int i = 0; i < V; i++)
            {
                if (match[i] < 0)
                {
                    seen = new bool[V];
                    if (DFS(i)) res++;
                }
            }
            return res;
        }
        bool DFS(int v)
        {
            seen[v] = true;
            foreach (int next in G[v])
            {
                int m = match[next];
                if (m < 0 || !seen[m] && DFS(m))
                {
                    match[v] = next;
                    match[next] = v;
                    return true;
                }
            }
            return false;
        }
    }

}



class Entry { static void Main() { new Program().Solve(); } }
class Reader
{
    private static TextReader reader = Console.In;
    private static readonly char[] separator = { ' ' };
    private static readonly StringSplitOptions op = StringSplitOptions.RemoveEmptyEntries;
    private static string[] A = new string[0];
    private static int i;
    private static void Init() { A = new string[0]; }
    public static void Set(TextReader r) { reader = r; Init(); }
    public static void Set(string file) { reader = new StreamReader(file); Init(); }
    public static bool HasNext() { return CheckNext(); }
    public static string String() { return Next(); }
    public static int Int() { return int.Parse(Next()); }
    public static long Long() { return long.Parse(Next()); }
    public static double Double() { return double.Parse(Next()); }
    public static int[] IntLine() { return Array.ConvertAll(Split(Line()), int.Parse); }
    public static int[] IntArray(int N) { return Enu.Range(0, N).Select(i => Int()).ToArray(); }
    public static int[][] IntTable(int H) { return Enu.Range(0, H).Select(i => IntLine()).ToArray(); }
    public static string[] StringArray(int N) { return Enu.Range(0, N).Select(i => Line()).ToArray(); }
    public static string Line() { return reader.ReadLine().Trim(); }
    private static string[] Split(string s) { return s.Split(separator, op); }
    private static string Next() { CheckNext(); return A[i++]; }
    private static bool CheckNext()
    {
        if (i < A.Length) return true;
        string line = reader.ReadLine();
        if (line == null) return false;
        if (line == "") return CheckNext();
        A = Split(line);
        i = 0;
        return true;
    }
}
0