제출 #1148119

#제출 시각아이디문제언어결과실행 시간메모리
1148119ruben_ipenzaCoin Collecting (JOI19_ho_t4)Java
컴파일 에러
0 ms0 KiB
import java.io.*; import java.util.*; public class Main { static class Edge { int to, capacity, cost, rev; Edge(int to, int capacity, int cost, int rev) { this.to = to; this.capacity = capacity; this.cost = cost; this.rev = rev; } } static class MinCostMaxFlow { private final int V; private List<Edge>[] graph; private int[] dist, prevNode, prevEdge; private boolean[] inQueue; public MinCostMaxFlow(int V) { this.V = V; graph = new ArrayList[V]; for (int i = 0; i < V; i++) graph[i] = new ArrayList<>(); } public void addEdge(int from, int to, int capacity, int cost) { graph[from].add(new Edge(to, capacity, cost, graph[to].size())); graph[to].add(new Edge(from, 0, -cost, graph[from].size() - 1)); } public int minCostMaxFlow(int source, int sink, int flowLimit) { int flow = 0, cost = 0; while (flow < flowLimit) { dist = new int[V]; Arrays.fill(dist, Integer.MAX_VALUE); prevNode = new int[V]; prevEdge = new int[V]; inQueue = new boolean[V]; Queue<Integer> queue = new LinkedList<>(); queue.add(source); dist[source] = 0; inQueue[source] = true; while (!queue.isEmpty()) { int u = queue.poll(); inQueue[u] = false; for (int i = 0; i < graph[u].size(); i++) { Edge e = graph[u].get(i); if (e.capacity > 0 && dist[u] + e.cost < dist[e.to]) { dist[e.to] = dist[u] + e.cost; prevNode[e.to] = u; prevEdge[e.to] = i; if (!inQueue[e.to]) { queue.add(e.to); inQueue[e.to] = true; } } } } if (dist[sink] == Integer.MAX_VALUE) break; int f = flowLimit - flow; for (int v = sink; v != source; v = prevNode[v]) { f = Math.min(f, graph[prevNode[v]].get(prevEdge[v]).capacity); } flow += f; cost += f * dist[sink]; for (int v = sink; v != source; v = prevNode[v]) { Edge e = graph[prevNode[v]].get(prevEdge[v]); e.capacity -= f; graph[v].get(e.rev).capacity += f; } } return cost; } } public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(reader.readLine()); int totalCoins = 2 * N; int[][] coins = new int[totalCoins][2]; for (int i = 0; i < totalCoins; i++) { String[] input = reader.readLine().split(" "); coins[i][0] = Integer.parseInt(input[0]); coins[i][1] = Integer.parseInt(input[1]); } List<int[]> targets = new ArrayList<>(); for (int x = 1; x <= N; x++) { for (int y = 1; y <= 2; y++) { targets.add(new int[]{x, y}); } } int V = totalCoins + N * 2 + 2; int source = V - 2, sink = V - 1; MinCostMaxFlow mcmf = new MinCostMaxFlow(V); for (int i = 0; i < totalCoins; i++) { mcmf.addEdge(source, i, 1, 0); } for (int j = 0; j < targets.size(); j++) { mcmf.addEdge(totalCoins + j, sink, 1, 0); } for (int i = 0; i < totalCoins; i++) { for (int j = 0; j < targets.size(); j++) { int cost = Math.abs(coins[i][0] - targets.get(j)[0]) + Math.abs(coins[i][1] - targets.get(j)[1]); mcmf.addEdge(i, totalCoins + j, 1, cost); } } int result = mcmf.minCostMaxFlow(source, sink, totalCoins); System.out.println(result); } }

컴파일 시 표준 에러 (stderr) 메시지

joi2019_ho_t4.java:4: error: class Main is public, should be declared in a file named Main.java
public class Main {
       ^
Note: joi2019_ho_t4.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error

=======