結果

問題 No.92 逃走経路
ユーザー mban
提出日時 2017-01-12 07:10:33
言語 C#
結果
WA  
実行時間 -
コード長 3077 Byte
コンパイル時間 316 ms
使用メモリ 42308 KB

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
challenge01.txt WA -
sample01.txt AC 34 ms
17564 KB
sample02.txt AC 35 ms
15528 KB
test01.txt WA -
test02.txt WA -
test03.txt AC 105 ms
17600 KB
test04.txt AC 49 ms
15564 KB
test05.txt AC 48 ms
17612 KB
test06.txt AC 52 ms
24636 KB
test07.txt AC 86 ms
39516 KB
test08.txt WA -
test09.txt AC 2007 ms
39280 KB
test10.txt AC 4149 ms
42308 KB
test11.txt WA -
test12.txt WA -
test13.txt WA -
test14.txt WA -
test15.txt WA -
test16.txt WA -
test17.txt WA -
テストケース一括ダウンロード

ソースコード

diff #
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using System.Text.RegularExpressions;
using System.Linq;
using System.IO;

class Program
{
    static private Magatro M = new Magatro();
    static private void Main(string[]args)
    {
        M.Scan();
        M.Solve();
    }
}
public class Scanner
{
    private string[] S;
    private int Index;
    private char Separator;
    public Scanner(char separator = ' ')
    {
        Index = 0;
        Separator = separator;
    }
    private string[] Line()
    {
        return Console.ReadLine().Split(Separator);
    }
    public string Next()
    {
        string result;
        if (S == null || Index >= S.Length)
        {
            S = Line();
            Index = 0;
        }
        result = S[Index];
        Index++;
        return result;
    }
    public int NextInt()
    {
        return int.Parse(Next());
    }
    public double NextDouble()
    {
        return double.Parse(Next());
    }
    public long NextLong()
    {
        return long.Parse(Next());
    }
}
public class Magatro
{
    private int N, M, K;
    private int[] d;
    private List<int>[] Load;
    private List<int>[] Fee;
    private HashSet<int> Anser = new HashSet<int>();
    public void Scan()
    {
        Scanner sc = new Scanner();
        N = sc.NextInt();
        M = sc.NextInt();
        K = sc.NextInt();
        Load = new List<int>[N];
        Fee = new List<int>[N];
        for(int i = 0; i < N; i++)
        {
            Load[i] = new List<int>();
            Fee[i] = new List<int>();
        }
        for (int i = 0; i < M; i++)
        {
            int a = sc.NextInt();
            int b = sc.NextInt();
            int c = sc.NextInt();
            Load[a - 1].Add(b-1);
            Load[b - 1].Add(a-1);
            Fee[a - 1].Add(c);
            Fee[b - 1].Add(c);
        }
        d = new int[K];
        for(int i = 0; i < K; i++)
        {
            d[i] = sc.NextInt();
        }
    }
    public void Solve()
    {
        for(int i = 0; i < N; i++)
        {
            HashSet<int>[] to = new HashSet<int>[K];
            for(int j = 0; j < K; j++)
            {
                to[j] = new HashSet<int>();
                if (j == 0)
                {
                    for (int k = 0; k < Load[i].Count; k++)
                    {
                        if (Fee[i][k] == d[j]) to[j].Add(Load[i][k]);
                    }
                }
                else
                {
                    foreach(int k in to[j - 1])
                    {
                        for(int l = 0; l < Load[k].Count; l++)
                        {
                            if (Fee[k][l] == d[j]) to[j].Add(Load[k][l]);
                        }
                    }
                }
            }
            foreach(int ans in to[K - 1])
            {
                Anser.Add(ans+1);
            }

        }
        Console.WriteLine(Anser.Count);
        Console.WriteLine(string.Join(" ", Anser));
    }
}
0