본문 바로가기
백준일지

[백준] 1707번 이분 그래프

by 민지기il 2025. 1. 23.
#include <bits/stdc++.h>
#define fastio cin.tie(0)->sync_with_stdio(0)
#define RED 1
#define BLUE 2
using namespace std;

vector<int> vect[20001];
int visited[20001];
int V,E;

void BFS(int start){
    visited[start] = RED;
    queue<int> q;
    q.push(start);
    
    while(q.size()!=0){
        int now=q.front();
        q.pop();
        for(int i=0; i<vect[now].size(); i++){
            if(visited[vect[now][i]]==0){
                q.push(vect[now][i]);
                
                if(visited[now]==RED) visited[vect[now][i]]=BLUE;
                else if(visited[now]==BLUE) visited[vect[now][i]] = RED;
            }
        }
    }
}
bool check(){
    for (int i=1; i<=V;i++){
        for(int j=0; j<vect[i].size(); j++){
            if(visited[i]==visited[vect[i][j]])
                return false;
        }
    }
    return true;
}

int main()
{
    int K, u, v;
    cin >> K;

    while (K--)
    {
        cin >> V >> E;
        for (int i = 0; i < E; i++)
        {
            cin >> u >> v;
            vect[u].push_back(v);
            vect[v].push_back(u);
        }

        //빠짐없이 방문하기 위해 노드 개수만큼 BFS 돌려줘야함
        for (int i = 1; i <= V; i++)
        {
            if (visited[i] == 0)
            {
                BFS(i);
            }
        }

        //이분그래프 검사
        if (check())
            cout << "YES\n";
        else
            cout << "NO\n";

        memset(visited, 0, sizeof(visited));
        memset(vect, 0, sizeof(vect));
    }
}

 

<참고 사이트>

https://velog.io/@matcha_/%EB%B0%B1%EC%A4%80-1707-%EC%9D%B4%EB%B6%84%EA%B7%B8%EB%9E%98%ED%94%84-C-BFS-DFS

'백준일지' 카테고리의 다른 글

[백준] 1018번 체스판 다시 칠하기  (0) 2025.02.03
[백준] 17825번 윷놀이  (0) 2025.02.03
[백준] 2667번 단지 번호 붙이기  (0) 2025.01.22
[백준] 1697번 숨바꼭질  (0) 2025.01.21
[백준] 1260번 DFS/BFS  (0) 2025.01.20