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 | 29 | 
| 30 | 
                            Tags
                            
                        
                          
                          - 큐
 - 후쿠오카
 - 너비 우선 탐색
 - 깊이 우선 탐색
 - 일본 여행
 - 플로이드 와샬
 - IOS
 - BOJ
 - 하카타역
 - 알고리즘
 - queue
 - 후쿠오카 요도바시 하카타
 - 미로찾기
 - 삼성 SW 테스트
 - 백준
 - 후쿠오카 4박 5일
 - 완전 탐색
 - 후쿠오카 여행경비
 - 시뮬레이션
 - 삼성테스트
 - deque
 - 후쿠오카 캐널시티
 - brute force
 - 플로이드
 - 완전탐색
 - 삼성시험
 - dfs
 - DP
 - 다이나믹 프로그래밍
 - BFS
 
                            Archives
                            
                        
                          
                          - Today
 
- Total
 
맛있는감귤
BOJ : 1707 이분 그래프 본문
문제 : https://www.acmicpc.net/problem/1707
github : https://github.com/JEONG-SEUNGWOOK/BOJ/blob/master/1707.cpp
한 노드가 1 또는 0의 값을 가지고 있다고 하면 다음 노드는 반대 값을 가지고 있는 것이 이분 그래프라고 생각하면 된다.
1-0-1-0
|
0-1 뭐 이런 식으로..?
start 노드를 기준으로 DFS를 이용해 다음 노드를 탐색하며 기준 노드와 다음 노드가 다른 값을 가지는지 검사한다.
#include <vector>
#include <cstdio>
using namespace std;
vector<int> G[20001];
int value[20001];
int V, E;
int flag = 1;
bool dfs(int start,int f){
    
    value[start]=f;
    for(int i=0; i<G[start].size(); i++){
        int v = G[start][i];
        if(value[v]==0 && !dfs(v,-f)) {
            return false;
        }
        if(value[v]==f){
            return false;
        }
    }
    return true;
}
void process(){
    
    for(int i=0; i<V; i++){
        if(value[i]==0 && !dfs(i, 1)){
            printf("NO\n");
            return;
            
            
        }
    }
    printf("YES\n");
}
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d %d",&V, &E);
        for(int i=0; i<V; ++i){
            G[i].clear();
            value[i]=0;
        }
        while(E--){
            int a,b;
            scanf("%d %d",&a, &b);
            a--;b--;
            G[a].push_back(b);
            G[b].push_back(a);
        }
        if(V == 1){
            printf("NO\n");
            continue;
        }
        else process();
    }
    return 0;
}'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
| BOJ : 6378 디지털 루트 (0) | 2017.01.19 | 
|---|---|
| BOJ : 1743 음식물 피하기 (0) | 2017.01.17 | 
| BOJ : 1697 숨바꼭질 (0) | 2017.01.17 | 
| BOJ : 1475 방 번호 (0) | 2017.01.17 | 
| BOJ : 2775 부녀회장이 될테야 (0) | 2017.01.17 |