• 문제 링크
1707번: 이분 그래프
입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에
www.acmicpc.net
• 풀이 과정
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
static List<Integer>[] graph;
static int[] visit;
static boolean isBipartite;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int k = Integer.parseInt(br.readLine());
while (k-- > 0) {
st = new StringTokenizer(br.readLine());
int v = Integer.parseInt(st.nextToken());
int e = Integer.parseInt(st.nextToken());
graph = new ArrayList[v + 1];
visit = new int[v + 1];
isBipartite = false;
for (int i = 1; i <= v; i++)
graph[i] = new ArrayList<>();
for (int i = 0; i < e; i++) {
st = new StringTokenizer(br.readLine());
int src = Integer.parseInt(st.nextToken());
int dest = Integer.parseInt(st.nextToken());
graph[src].add(dest);
graph[dest].add(src);
}
for (int i = 1; i <= v; i++) {
if (visit[i] == 0)
dfs(i, 1);
}
bw.write((isBipartite ? "NO" : "YES") + "\n");
}
bw.flush();
}
private static void dfs(int node, int color) {
visit[node] = color;
if (isBipartite)
return;
for (int i : graph[node]) {
if (visit[i] == visit[node]) {
isBipartite = true;
return;
}
if (visit[i] == 0)
dfs(i, color * -1);
}
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 16929 Two Dots - Graph Theory / Java (0) | 2022.10.05 |
---|---|
[백준] 14226 이모티콘 - Graph Theory / Java (0) | 2022.10.04 |
[백준] 1261 알고스팟 - Graph Theory / Java (0) | 2022.10.02 |
[백준] 2109 순회강연 - Greedy / Java (0) | 2022.10.01 |
[백준] 1202 보석 도둑 - Greedy / Java (0) | 2022.09.30 |
댓글