Skip to content

Commit 65cc465

Browse files
authored
Merge pull request #1824 from AlgorithmWithGod/ksinji
[20260124] BOJ / G4 / 거짓말 / 강신지
2 parents fc3c56c + 723f0bd commit 65cc465

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

ksinji/202601/24 BOJ 거짓말.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
static int n, m;
7+
static int[] parent;
8+
9+
public static void main(String[] args) throws Exception {
10+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
StringTokenizer st = new StringTokenizer(br.readLine());
12+
13+
n = Integer.parseInt(st.nextToken());
14+
m = Integer.parseInt(st.nextToken());
15+
16+
parent = new int[n + 1];
17+
for (int i = 1; i <= n; i++) parent[i] = i;
18+
19+
st = new StringTokenizer(br.readLine());
20+
int truthCnt = Integer.parseInt(st.nextToken());
21+
int[] truth = new int[truthCnt];
22+
for (int i = 0; i < truthCnt; i++) {
23+
truth[i] = Integer.parseInt(st.nextToken());
24+
}
25+
26+
if (truthCnt == 0) {
27+
for (int i = 0; i < m; i++) {
28+
br.readLine();
29+
}
30+
System.out.println(m);
31+
return;
32+
}
33+
34+
for (int i = 1; i < truthCnt; i++) {
35+
union(truth[0], truth[i]);
36+
}
37+
38+
int[][] party = new int[m][];
39+
for (int i = 0; i < m; i++) {
40+
st = new StringTokenizer(br.readLine());
41+
int k = Integer.parseInt(st.nextToken());
42+
int[] member = new int[k];
43+
for (int j = 0; j < k; j++) {
44+
member[j] = Integer.parseInt(st.nextToken());
45+
}
46+
party[i] = member;
47+
48+
for (int j = 1; j < k; j++) {
49+
union(member[0], member[j]);
50+
}
51+
}
52+
53+
int truthGroup = find(truth[0]);
54+
int ans = 0;
55+
56+
for (int i = 0; i < m; i++) {
57+
boolean ok = true;
58+
for (int person : party[i]) {
59+
if (find(person) == truthGroup) {
60+
ok = false;
61+
break;
62+
}
63+
}
64+
if (ok) ans++;
65+
}
66+
67+
System.out.println(ans);
68+
}
69+
70+
static int find(int x) {
71+
if (parent[x] == x) return x;
72+
return parent[x] = find(parent[x]);
73+
}
74+
75+
static void union(int a, int b) {
76+
a = find(a);
77+
b = find(b);
78+
if (a == b) return;
79+
parent[b] = a;
80+
}
81+
}
82+
83+
```

0 commit comments

Comments
 (0)