Submission #306004

#TimeUsernameProblemLanguageResultExecution timeMemory
306004llakiStations (IOI20_stations)Java
0 / 100
1480 ms38772 KiB
import java.util.ArrayList; public class stations { int[] label(int n, int k, int[] u, int[] v) { ArrayList<Integer>[] G = new ArrayList[n]; for (int i = 0; i < G.length; i++) { G[i] = new ArrayList<>(); } for (int i = 0; i < u.length; i++) { G[u[i]].add(v[i]); G[v[i]].add(u[i]); } int maxSize = 0; for (int i = 0; i < n; i++) { maxSize = Math.max(maxSize, G[i].size()); } int[] labels = new int[n]; if (maxSize > 0) { for (int i = 0; i < n; i++) { labels[i] = i; } return labels; } int leaf = -1; for (int i = 0; i < n; i++) { if (G[i].size() == 1) { leaf = i; break; } } int cur = 0; int node = leaf; int prev = -1; while (true) { labels[node] = cur; cur++; boolean found = false; for (int to : G[node]) { if (to == prev) continue; prev = node; node = to; found = true; break; } if (!found) break; } return labels; } boolean isAncestor(int a, int b) { if (a == b) return true; while (a > 0) { a = (a - 1) / 2; if (a == b) return true; } return false; } int find_next_station(int s, int t, int[] c) { if (c.length == 1) { return c[0]; } if (!isAncestor(t, s)) { return s / 2; } for (int nd : c) { if (isAncestor(t, nd)) { return nd; } } // for (int nd : c) { // if (s <= nd && nd <= t) return nd; // if (s >= nd && nd >= t) return nd; // } return -1; } }

Compilation message (stderr)

Note: stations.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...