1043번: 거짓말
지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게
www.acmicpc.net
package baekjoon;
import java.util.*;
import java.io.*;
public class b1043 {
static int parent[];
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
parent = new int[n+1];
int M = Integer.parseInt(st.nextToken());
List<Integer>[] p = new ArrayList[M+1];
for (int i = 1; i <= M; i++) {
p[i] = new ArrayList<Integer>();
}
for(int i = 1 ; i <= n ; i++)
{
parent[i] = i;
}
boolean check[] = new boolean[n+1];
st = new StringTokenizer(br.readLine());
int temp = Integer.parseInt(st.nextToken());
for(int i = 0 ; i < temp ; i++)
{
check[Integer.parseInt(st.nextToken())] = true;
}
for (int i = 1; i <= M; i++) {
String inputs[] = br.readLine().split(" ");
int party_num = Integer.parseInt(inputs[0]);
if(party_num<=1) {
p[i].add(Integer.parseInt(inputs[1]));
continue;
}
for (int j = 1; j < party_num; j++) {
int a = Integer.parseInt(inputs[j]);
int b = Integer.parseInt(inputs[j+1]);
if (Find(a) != Find(b)) {
Union(a,b);
}
p[i].add(a);
p[i].add(b);
}
}
boolean[] visited = new boolean[n + 1];
for (int i = 1; i <= n; i++) {
if(check[i] && visited[i] != true){
int root = Find(i);
for (int j = 1; j <= n; j++){
if (Find(j)==root) {
check[j] = true;
visited[j] = true;
}
}
}
}
int cnt = 0;
for (int i = 1; i <= M; i++) {
boolean flag = false;
for (int person : p[i]) {
if(check[person]){
flag = true;
break;
}
}
if(!flag) cnt++;
}
bw.write(cnt+"");
bw.close();
}
static public int Find(int a)
{
if (a == parent[a])
return a;
return parent[a] = Find(parent[a]);
}
public static void Union(int a, int b)
{
int pa = Find(a), pb = Find(b);
parent[pa] = pb;
}
}
솔직히 구글링 했는데요...
이해는 했는데 제 머리로는 조금 복잡하게...어렵게 느껴졌슴니다...
낼 일어나면 이거 코드 먼저 다시 공부하겠슴니다...
'BOJ' 카테고리의 다른 글
[python]백준 1238번 - 파티 (0) | 2023.07.21 |
---|---|
[JAVA] 백준 5107번 - 마니또 (2) | 2023.07.20 |
[JAVA]백준 1092번 - 배 (0) | 2023.07.18 |
[JAVA]백준 1068번 - 트리 (2) | 2023.07.17 |
[JAVA]백준 1956번 - 운동 (2) | 2023.07.16 |
댓글