結果
問題 | No.92 逃走経路 |
ユーザー |
|
提出日時 | 2015-11-23 11:47:36 |
言語 | Java (openjdk 23) |
結果 |
TLE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 2,159 bytes |
コンパイル時間 | 3,763 ms |
コンパイル使用メモリ | 81,044 KB |
実行使用メモリ | 110,640 KB |
最終ジャッジ日時 | 2024-09-13 17:14:54 |
合計ジャッジ時間 | 14,623 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 10 TLE * 1 -- * 7 |
ソースコード
import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Deque;import java.util.List;import java.util.Queue;import java.util.Scanner;import java.util.Set;import java.util.TreeSet;public class Main_yukicoder92 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int k = sc.nextInt();List<Queue<Edge>> edges = new ArrayList<Queue<Edge>>();for (int i = 0; i < n; i++) {edges.add(new ArrayDeque<Edge>());}for (int i = 0; i < m; i++) {int a = sc.nextInt() - 1;int b = sc.nextInt() - 1;int c = sc.nextInt();edges.get(a).add(new Edge(a, b, c));edges.get(b).add(new Edge(b, a, c));}int[] d = new int[k];for (int i = 0; i < k; i++) {d[i] = sc.nextInt();}Set<Integer> ret = new TreeSet<Integer>();for (int i = 0; i < n; i++) {Deque<Integer> sts = new ArrayDeque<Integer>();Deque<Integer> std = new ArrayDeque<Integer>();Deque<Integer> stn = new ArrayDeque<Integer>();sts.push(i);std.push(0);stn.push(i);while (!sts.isEmpty()) {int st = sts.pop();int di = std.pop();int no = stn.pop();if (di == k) {ret.add(st);break;}for (Edge e : edges.get(no)) {if (e.w == d[k - 1 - di]) {sts.push(st);std.push(di + 1);stn.push(e.v);}}}}System.out.println(ret.size());boolean flag = false;for (int e : ret) {if (!flag) {System.out.printf("%d", e + 1);flag = true;} else {System.out.printf(" %d", e + 1);}}System.out.println("");sc.close();}private static class Edge {// int u; // fromint v; // toint w; // costEdge(int u, int v, int w) {// this.u = u;this.v = v;this.w = w;}}}