반응형
1.이분 그래프는 한 정점으로 이동할 때 다른 집합에 속한 정점으로 이동하게 된다.
2.따라서 한번 이동할 때마다 다른 집합으로 체크해준다.
3.체크해준 숫자가 다르다면 이분그래프이다.
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include <iostream> #include <vector> using namespace std; vector <int> a[20001]; int ck[20001]; int K, V, E, u, v; void DFS(int x, int c) { ck[x] = c; for (int i = 0; i < a[x].size(); i++) { int y = a[x][i]; if (ck[y] == 0) { DFS(y, 3 - c);//건너편 정점으로 이동->다른 집합의 정점으로 이동 } } } int main() { cin >> K; while (K--) { cin >> V >> E; bool ans = true; for (int i = 1; i <= 20000; i++) { a[i].clear(); ck[i] = 0; } while (E--) { cin >> u >> v; a[u].push_back(v); a[v].push_back(u); } for (int i = 1; i <= V; i++) { if (ck[i] == 0) DFS(i, 1); } for (int i = 1; i <= V; i++) { for (int j = 0; j < a[i].size(); j++) { int tmp = a[i][j]; if (ck[i] == ck[tmp])//같은 집합이라면 ans = false; } } printf("%s\n", ans ? "YES" : "NO"); } } | cs |
'Algorithm' 카테고리의 다른 글
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 2812번:크게 만들기(스택) 답 (5) | 2017.03.26 |
---|---|
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 2331번:반복수열 답 (0) | 2017.03.26 |
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 10867번:중복 빼고 정렬하기 답 (0) | 2017.03.26 |
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 2042번:구간 합 구하기 답 (0) | 2017.03.24 |
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 2745번:진법변환 답 (0) | 2017.03.22 |