結果
問題 | No.812 Change of Class |
ユーザー |
![]() |
提出日時 | 2019-07-10 02:06:08 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 608 ms / 4,000 ms |
コード長 | 5,569 bytes |
コンパイル時間 | 3,459 ms |
コンパイル使用メモリ | 84,680 KB |
実行使用メモリ | 63,136 KB |
最終ジャッジ日時 | 2024-06-12 21:16:13 |
合計ジャッジ時間 | 26,615 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 60 |
ソースコード
import java.io.*;import java.util.Arrays;import java.util.StringJoiner;import java.util.StringTokenizer;import java.util.function.Function;public class Main {static int N, M;static int[] U, V;static int Q;static int[] A;public static void main(String[] args) {FastScanner sc = new FastScanner(System.in);N = sc.nextInt();M = sc.nextInt();U = new int[M];V = new int[M];for (int i = 0; i < M; i++) {U[i] = sc.nextInt()-1;V[i] = sc.nextInt()-1;}Q = sc.nextInt();A = sc.nextIntArray(Q, -1);PrintWriter pw = new PrintWriter(System.out);solve(pw);pw.flush();}static void solve(PrintWriter pw) {int[][] G = adjB(N, U, V);int[] ans = new int[Q];int[] q = new int[N];int[] dist = new int[N];for (int i = 0; i < Q; i++) {Arrays.fill(dist, Integer.MAX_VALUE);int u = 0, v = 0;q[v++] = A[i];dist[A[i]] = 0;int maxDist = 0;int cnt = 0;while( u != v ) {int a = q[u++];for (int b : G[a]) {if( dist[b] > dist[a] + 1 ) {dist[b] = dist[a] + 1;q[v++] = b;maxDist = Math.max(maxDist, dist[b]);cnt++;}}}int time;if( cnt == 0 ) {time = 0;} else if( maxDist <= 1 ) {time = 0;} else {time = log2(maxDist);}pw.println( cnt + " " + time);}}static int log2(int n) {int d = 2;int time = 1;while( d < n ) {time++;d*=2;}return time;}static int[][] adjB(int n, int[] from, int[] to) {int[][] adj = new int[n][];int[] cnt = new int[n];for (int f : from) {cnt[f]++;}for (int t : to) {cnt[t]++;}for (int i = 0; i < n; i++) {adj[i] = new int[cnt[i]];}for (int i = 0; i < from.length; i++) {adj[from[i]][--cnt[from[i]]] = to[i];adj[to[i]][--cnt[to[i]]] = from[i];}return adj;}@SuppressWarnings("unused")static class FastScanner {private BufferedReader reader;private StringTokenizer tokenizer;FastScanner(InputStream in) {reader = new BufferedReader(new InputStreamReader(in));tokenizer = null;}String next() {if (tokenizer == null || !tokenizer.hasMoreTokens()) {try {tokenizer = new StringTokenizer(reader.readLine());} catch (IOException e) {throw new RuntimeException(e);}}return tokenizer.nextToken();}String nextLine() {if (tokenizer == null || !tokenizer.hasMoreTokens()) {try {return reader.readLine();} catch (IOException e) {throw new RuntimeException(e);}}return tokenizer.nextToken("\n");}long nextLong() {return Long.parseLong(next());}int nextInt() {return Integer.parseInt(next());}int[] nextIntArray(int n) {int[] a = new int[n];for (int i = 0; i < n; i++)a[i] = nextInt();return a;}int[] nextIntArray(int n, int delta) {int[] a = new int[n];for (int i = 0; i < n; i++)a[i] = nextInt() + delta;return a;}long[] nextLongArray(int n) {long[] a = new long[n];for (int i = 0; i < n; i++)a[i] = nextLong();return a;}}static <A> void writeLines(A[] as, Function<A, String> f) {PrintWriter pw = new PrintWriter(System.out);for (A a : as) {pw.println(f.apply(a));}pw.flush();}static void writeLines(int[] as) {PrintWriter pw = new PrintWriter(System.out);for (int a : as) pw.println(a);pw.flush();}static void writeLines(long[] as) {PrintWriter pw = new PrintWriter(System.out);for (long a : as) pw.println(a);pw.flush();}static int max(int... as) {int max = Integer.MIN_VALUE;for (int a : as) max = Math.max(a, max);return max;}static int min(int... as) {int min = Integer.MAX_VALUE;for (int a : as) min = Math.min(a, min);return min;}static void debug(Object... args) {StringJoiner j = new StringJoiner(" ");for (Object arg : args) {if (arg instanceof int[]) j.add(Arrays.toString((int[]) arg));else if (arg instanceof long[]) j.add(Arrays.toString((long[]) arg));else if (arg instanceof double[]) j.add(Arrays.toString((double[]) arg));else if (arg instanceof Object[]) j.add(Arrays.toString((Object[]) arg));else j.add(arg.toString());}System.err.println(j.toString());}}