結果
| 問題 |
No.2532 Want Play More
|
| コンテスト | |
| ユーザー |
ks2m
|
| 提出日時 | 2023-11-03 22:57:42 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 893 ms / 2,000 ms |
| コード長 | 1,626 bytes |
| コンパイル時間 | 3,265 ms |
| コンパイル使用メモリ | 78,536 KB |
| 実行使用メモリ | 119,884 KB |
| 最終ジャッジ日時 | 2024-09-25 21:20:04 |
| 合計ジャッジ時間 | 19,776 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 26 |
ソースコード
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
static int n;
static List<List<Integer>> list;
static int[] min, max, mini, maxi;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] sa = br.readLine().split(" ");
n = Integer.parseInt(sa[0]);
list = new ArrayList<>(n);
for (int i = 0; i < n; i++) {
list.add(new ArrayList<>());
}
for (int i = 0; i < n - 1; i++) {
sa = br.readLine().split(" ");
int a = Integer.parseInt(sa[0]) - 1;
int b = Integer.parseInt(sa[1]) - 1;
list.get(a).add(b);
list.get(b).add(a);
}
br.close();
min = new int[n];
Arrays.fill(min, 100000000);
max = new int[n];
mini = new int[n];
maxi = new int[n];
Arrays.fill(mini, -1);
Arrays.fill(maxi, -1);
dfs(0, -1);
int x = 0;
int ans = -1;
while (x != -1) {
x = maxi[x];
ans++;
if (x == -1) {
break;
}
x = mini[x];
ans++;
}
System.out.println(ans);
x = 0;
ans = -1;
while (x != -1) {
x = mini[x];
ans++;
if (x == -1) {
break;
}
x = maxi[x];
ans++;
}
System.out.println(ans);
}
static void dfs(int x, int p) {
for (int i : list.get(x)) {
if (i == p) {
continue;
}
dfs(i, x);
if (max[i] <= min[x]) {
min[x] = max[i];
mini[x] = i;
}
if (min[i] >= max[x]) {
max[x] = min[i];
maxi[x] = i;
}
}
if (list.get(x).size() == 1) {
min[x] = 0;
} else {
min[x]++;
max[x]++;
}
}
}
ks2m