Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 그래프
- 완전이진트리
- 이진트리
- 인오더
- 11724
- Java
- 이분그래프
- 링킹
- 동적계획법
- JAVA_HOME
- dfs
- 도커
- 피보나치
- 전공자따라잡기
- n진법게임
- 순회
- 백준
- 웹개발
- 자바
- BFS
- 프로그래머스
- 포스트오더
- 바인딩
- DynamicProgramming
- 포화이진트리
- 1707
- Bottom Up
- 연결요소
- 9093
- 알고리즘
Archives
- Today
- Total
물음표 살인마
[백준1707] 문제를 통해 이분 그래프 이해하기 본문
이분그래프란?
위의 그림과 같이 A(검정)/B(회색)로 나눌 수 있는 그래프
A에 포함된 정점끼리 연결된 간선이 없음
B에 포함된 정점끼리 연결된 간선이 없음
A-B 서로를 연결하는 간선만 존재
EX. 수강신청 시 학생과 과목을 연결, 소유물 표현 시 사람과 사물을 연결할 때 등 쓰인다
-----
이분그래프 관련 문제
https://www.acmicpc.net/problem/1707
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
//0은 체크안함, 1/2로 속한 그룹을 체크한다.
static int[] checked;
static ArrayList<Integer>[] g;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int k = sc.nextInt();
for (int i = 0; i < k; i++) {
int v = sc.nextInt();
int e = sc.nextInt();
checked = new int[v+1];
g = new ArrayList[v+1];
for (int j = 1; j <= v; j++) {
g[j] = new ArrayList<Integer>();
}
for (int j = 0; j < e; j++) {
int num1 = sc.nextInt();
int num2 = sc.nextInt();
g[num1].add(num2);
g[num2].add(num1);
}
boolean result = true;
for (int j = 1; j <= v; j++) {
if (checked[j] == 0) {
if(!dfs(j, 1)) result = false;
}
}
System.out.println(result?"YES":"NO");
}
}
static boolean dfs(int node, int c) {
checked[node] = c;
for (int i = 0; i < g[node].size(); i++) {
int next = g[node].get(i);
if(checked[next] == 0){
if(dfs(next, 3 - c) == false){
return false;
}
} else if (checked[node] == checked[next]) {
return false;
}
}
return true;
}
}
'개발지식 > Algorithm' 카테고리의 다른 글
프로그래머스 N진수 게임으로 알아보는 자바 진법 변환 (0) | 2023.04.19 |
---|---|
트리 자료구조 이해하기 (0) | 2023.01.31 |
[백준11724] 연결 요소 - Connected Component란? (0) | 2023.01.10 |
[백준1260] DFS와 BFS 문제를 통해 그래프 탐색 이해하기 (0) | 2023.01.10 |
[백준13023] ABCDE - 그래프 표현 연습 (0) | 2023.01.07 |
Comments