Skip to content

Commit b27d9a1

Browse files
authored
[20251022] BOJ / G3 / 난개발 / 한종욱
1 parent a2afb8f commit b27d9a1

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
```
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
8+
private static List<int[]> events;
9+
private static int[][] points, traffic;
10+
private static int N, M;
11+
public static void main(String[] args) throws IOException {
12+
init();
13+
long answer = sweep();
14+
15+
bw.write(answer + "\n");
16+
bw.flush();
17+
bw.close();
18+
br.close();
19+
}
20+
21+
private static void init() throws IOException {
22+
StringTokenizer st = new StringTokenizer(br.readLine());
23+
N = Integer.parseInt(st.nextToken());
24+
M = Integer.parseInt(st.nextToken());
25+
26+
events = new ArrayList<>();
27+
points = new int[N+1][2];
28+
traffic = new int[M][3];
29+
30+
for (int i = 1; i <= N; i++) {
31+
st = new StringTokenizer(br.readLine());
32+
points[i][0] = Integer.parseInt(st.nextToken());
33+
points[i][1] = Integer.parseInt(st.nextToken());
34+
}
35+
36+
for (int i = 0; i < M; i++) {
37+
st = new StringTokenizer(br.readLine());
38+
int u = Integer.parseInt(st.nextToken());
39+
int v = Integer.parseInt(st.nextToken());
40+
int c = Integer.parseInt(st.nextToken());
41+
42+
traffic[i][0] = Math.min(points[u][1], points[v][1]);
43+
traffic[i][1] = Math.max(points[u][1], points[v][1]);
44+
traffic[i][2] = c;
45+
}
46+
47+
Arrays.sort(traffic, (o1, o2) -> {
48+
if (o1[0] == o2[0]) return Integer.compare(o1[1], o2[1]);
49+
return Integer.compare(o1[0], o2[0]);
50+
});
51+
52+
for (int[] t : traffic) {
53+
events.add(new int[]{t[0], t[2], 1});
54+
events.add(new int[]{t[1]+1, t[2], -1});
55+
}
56+
57+
events.sort((o1, o2) -> {
58+
if (o1[0] != o2[0]) return Integer.compare(o1[0], o2[0]);
59+
return Integer.compare(o1[2], o2[2]);
60+
});
61+
}
62+
63+
private static long sweep() {
64+
long result = 0;
65+
long current= 0;
66+
67+
for (int[] e : events) {
68+
current += (long)e[1]*e[2];
69+
result = Math.max(result, current);
70+
}
71+
72+
return result;
73+
}
74+
}
75+
```

0 commit comments

Comments
 (0)