結果

問題 No.241 出席番号(1)
ユーザー eitaho
提出日時 2015-07-10 22:39:05
言語 C#
(csc 3.100.19.26603)
結果
AC  
実行時間 39 ms
コード長 3,617 Byte
コンパイル時間 1,250 ms
使用メモリ 10,756 KB
最終ジャッジ日時 2019-10-13 05:46:16

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
99_system_test1.txt AC 37 ms
10,652 KB
99_system_test2.txt AC 37 ms
10,672 KB
99_system_test3.txt AC 37 ms
10,692 KB
99_system_test4.txt AC 37 ms
10,636 KB
99_system_test5.txt AC 37 ms
10,700 KB
99_system_test6.txt AC 36 ms
10,636 KB
99_system_test7.txt AC 36 ms
10,632 KB
99_system_test8.txt AC 36 ms
10,644 KB
challenge01.txt AC 36 ms
10,644 KB
challenge02.txt AC 36 ms
10,648 KB
sample1.txt AC 36 ms
10,640 KB
sample2.txt AC 37 ms
10,644 KB
sample3.txt AC 39 ms
10,664 KB
system_test1.txt AC 38 ms
10,688 KB
system_test2.txt AC 37 ms
10,740 KB
system_test3.txt AC 37 ms
10,740 KB
test1.txt AC 36 ms
10,636 KB
test2.txt AC 36 ms
10,640 KB
test3.txt AC 37 ms
10,644 KB
test4.txt AC 37 ms
10,632 KB
test5.txt AC 37 ms
10,644 KB
test6.txt AC 37 ms
10,636 KB
test7.txt AC 38 ms
10,640 KB
test8.txt AC 39 ms
10,704 KB
test9.txt AC 39 ms
10,748 KB
test10.txt AC 39 ms
10,748 KB
test11.txt AC 39 ms
10,740 KB
test12.txt AC 39 ms
10,756 KB
test13.txt AC 38 ms
10,752 KB
test14.txt AC 37 ms
10,748 KB
test15.txt AC 37 ms
10,752 KB
test16.txt AC 37 ms
10,748 KB
テストケース一括ダウンロード
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.100.19.26603 (9d80dea7)
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