Submission #306012

#TimeUsernameProblemLanguageResultExecution timeMemory
306012llakiStations (IOI20_stations)Java
8 / 100
1720 ms38956 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 (!isAncestor(t, s)) { return (s - 1) / 2; } for (int nd : c) { if (nd < s) continue; 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...