티스토리 뷰

Coding/acmicpc

백준 1707:이분 그래프

이끼대백과 2018. 3. 18. 00:23

백준 1707번 이분 그래프 문제입니다.


이번에는 C++로 코드를 짰습니다. C로 인접행렬 크기 20000*20000으로 잡으면 메모리 초과가 나는것 같아서.. vector를 이용했습니다. 각 정점으로 이동할 때 마다 1또는 2로 check번호를 매겨서 검사를 할때 인접한 정점과 check번호가 같은 정점이 발견되면 이분그래프가 아닌것이 되겠죠?

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
54
55
56
57
58
59
#include <vector>
#include <iostream>
 
using namespace std;
 
vector<vector<int> > graph;
int V, E;
vector<bool> visited;
vector<int> check;
 
bool biCheck() {
    for (int r = 0; r < V; r++) {  //전체 검사
        int curSize = graph[r].size();  //현재 정점에서 이동할 수 있는 갯수
        for (int c = 0; c < curSize; c++) {
            if (check[graph[r][c]] == check[r]) return false;  //인접한 정점과 구분한
        }                                                       //기준과 같으면 return false
    }
    return true;  //검사가 끝나면 return true
}
 
void dfs(int cur, int bi) {  //모든 정점은 1또는 2
    visited[cur] = true; check[cur]=bi % 2 + 1;  //방문체크 후 정점에 대한 구분
    int curSize = graph[cur].size();  //현재정점에서 이동할 수 있는 갯수
    for (int i = 0; i < curSize; i++) {
        int target = graph[cur][i];  //정점에서 이동할 정점
        if (!visited[target]) {  //방문하지 않았다면
            dfs(target, bi + 1); //탐색
        }
    }
}
 
int main(void) {
    int testCase;
    cin >> testCase;
    for (int tc = 0; tc < testCase; tc++) {
        cin >> V >> E;
        graph.resize(V);
        visited.resize(V);
        check.resize(V);
        for (int i = 0; i < E; i++) {
            int u, v;
            cin >> u >> v;
            graph[u - 1].push_back(v - 1);
            graph[v - 1].push_back(u - 1);
        }
        
        for (int i = 0; i < V; i++) {
            if (!visited[i]) dfs(i, 0);
        }
 
        if (biCheck()) cout << "YES\n";
        else cout << "NO\n";
        graph.clear();
        visited.clear();
        check.clear();
    }
 
    return 0;
}
cs


'Coding > acmicpc' 카테고리의 다른 글

백준 7562:나이트의 이동  (0) 2018.03.26
백준 2644:촌수계산  (0) 2018.03.19
백준 11403:경로찾기  (0) 2018.03.14
백준 2178:미로 탐색  (0) 2018.03.13
백준 9466:텀 프로젝트  (4) 2018.03.09
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/01   »
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
글 보관함