Skip to content

Commit 5ae9ade

Browse files
authored
Merge pull request #964 from AlgorithmWithGod/0224LJH
[20250924] BOJ / G2 / 닭싸움 팀 정하기 / 이종환
2 parents 862fd3a + ada0d8e commit 5ae9ade

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
```java
2+
import java.io.BufferedReader;
3+
import java.io.IOException;
4+
import java.io.InputStreamReader;
5+
import java.util.*;
6+
7+
class Main {
8+
static BufferedReader br= new BufferedReader(new InputStreamReader(System.in));;
9+
static int nodeCnt,relaCnt;
10+
static int[] parent,enemy;
11+
static HashSet<Integer> ans = new HashSet<>();
12+
13+
static final String FRIEND = "F";
14+
static final String ENEMY = "E";
15+
16+
static class Node{
17+
int rival = -1;
18+
19+
}
20+
21+
22+
public static void main(String[] args) throws NumberFormatException, IOException {
23+
init();
24+
process();
25+
print();
26+
27+
}
28+
29+
30+
public static void init() throws NumberFormatException, IOException {
31+
nodeCnt = Integer.parseInt(br.readLine());
32+
relaCnt = Integer.parseInt(br.readLine());
33+
enemy = new int[nodeCnt+1];
34+
parent = new int[nodeCnt+1];
35+
36+
for (int i = 1 ; i <= nodeCnt; i++) {
37+
parent[i] = i;
38+
}
39+
}
40+
41+
public static void process() throws IOException {
42+
for (int i = 0; i < relaCnt; i++) {
43+
StringTokenizer st = new StringTokenizer(br.readLine());
44+
String rela = st.nextToken();
45+
int node1 = Integer.parseInt(st.nextToken());
46+
int node2 = Integer.parseInt(st.nextToken());
47+
48+
if (rela.equals(FRIEND)) {
49+
50+
union(node1,node2);
51+
} else {
52+
if (enemy[node1] != 0) {
53+
union(node2, enemy[node1]);
54+
enemy[node1] = Math.min(enemy[node1], node2);
55+
}
56+
else enemy[node1] = node2;
57+
58+
if (enemy[node2] != 0) {
59+
60+
union(node1, enemy[node2]);
61+
enemy[node2] = Math.min(enemy[node2], node1);
62+
63+
}
64+
else enemy[node2] = node1;
65+
}
66+
67+
}
68+
69+
for (int i = 1; i <= nodeCnt; i++) {
70+
ans.add(find(i));
71+
}
72+
73+
}
74+
75+
public static void union(int node1, int node2) {
76+
77+
int parent1 = find(node1);
78+
int parent2 = find(node2);
79+
if (parent1 <= parent2) {
80+
parent[node2] = parent1;
81+
} else {
82+
parent[node1] = parent2;
83+
}
84+
}
85+
86+
public static int find(int node) {
87+
if (parent[node] == node) {
88+
return node;
89+
}
90+
91+
return parent[node] = find(parent[node]);
92+
}
93+
94+
95+
96+
97+
98+
99+
public static void print() {
100+
System.out.println(ans.size());
101+
}
102+
}
103+
```

0 commit comments

Comments
 (0)