Skip to content

Commit fa8af4f

Browse files
committed
[20251016] BOJ / G1 / 택배 / 김민진
1 parent 4c89367 commit fa8af4f

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
```java
2+
import java.io.*;
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.List;
6+
import java.util.StringTokenizer;
7+
8+
public class BJ_8980_택배 {
9+
10+
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
12+
private static StringTokenizer st;
13+
14+
private static int N, C, M, delivered, loaded;
15+
private static int[] packageLoaded;
16+
private static List<Node>[] graph;
17+
18+
private static class Node implements Comparable<Node> {
19+
int to;
20+
int packages;
21+
22+
Node(int to, int packages) {
23+
this.to = to;
24+
this.packages = packages;
25+
}
26+
27+
@Override
28+
public int compareTo(Node o) {
29+
return Integer.compare(this.to, o.to);
30+
}
31+
}
32+
33+
public static void main(String[] args) throws IOException {
34+
init();
35+
sol();
36+
}
37+
38+
private static void init() throws IOException {
39+
st = new StringTokenizer(br.readLine());
40+
41+
N = Integer.parseInt(st.nextToken());
42+
C = Integer.parseInt(st.nextToken());
43+
M = Integer.parseInt(br.readLine());
44+
45+
packageLoaded = new int[N + 1];
46+
47+
graph = new List[N + 1];
48+
for (int i = 1; i <= N; i++) {
49+
graph[i] = new ArrayList<>();
50+
}
51+
52+
for (int i = 0; i < M; i++) {
53+
st = new StringTokenizer(br.readLine());
54+
55+
int from = Integer.parseInt(st.nextToken());
56+
int to = Integer.parseInt(st.nextToken());
57+
int packages = Integer.parseInt(st.nextToken());
58+
59+
graph[from].add(new Node(to, packages));
60+
}
61+
62+
for (int i = 1; i <= N; i++) {
63+
Collections.sort(graph[i]);
64+
}
65+
}
66+
67+
private static void sol() throws IOException {
68+
for (int i = 1; i <= N; i++) {
69+
delivered += packageLoaded[i];
70+
loaded -= packageLoaded[i];
71+
72+
for (int j = 0; j < graph[i].size(); j++) {
73+
Node cur = graph[i].get(j);
74+
75+
if (loaded + cur.packages <= C) {
76+
loaded += cur.packages;
77+
packageLoaded[cur.to] += cur.packages;
78+
} else {
79+
int left = cur.packages - (C - loaded);
80+
for (int k = N; k >= cur.to; k--) {
81+
int diff = Math.min(left, packageLoaded[k]);
82+
83+
packageLoaded[k] -= diff;
84+
left -= diff;
85+
loaded += diff;
86+
87+
if (left == 0) break;
88+
}
89+
packageLoaded[cur.to] += cur.packages - left;
90+
}
91+
}
92+
}
93+
bw.write(delivered + "");
94+
bw.flush();
95+
bw.close();
96+
br.close();
97+
}
98+
99+
}
100+
```

0 commit comments

Comments
 (0)