되면한다
백준 1707. 이분 그래프 (그래프) 본문
https://www.acmicpc.net/problem/1707
1707번: 이분 그래프
입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에
www.acmicpc.net
못풀어서 https://github.com/encrypted-def/basic-algo-lecture/blob/master/0x18/solutions/1707.cpp 풀이법을 가져왔다.
1. 특징
그래프
2. 구현 방법
이분그래프란?
- 인접한 정점끼리 서로 다른 색으로 칠하여 모든 정점을 두 그룹으로 나누고, 서로 다른 그룹의 정점을 간선으로 연결한 그래프
3. 코드
#include <iostream>
#include <unordered_set>
#include <vector>
#include <queue>
using namespace std;
int t;
int v, e;
int u, w;
vector<int> adj[20002];
int gr[20002];
bool solve()
{
fill(gr+1, gr+v+1, -1);
for(int i = 1; i <= v; i++)
{
if(gr[i] != -1) continue;
queue<int> _queue;
_queue.push(i);
gr[i] = 0;
while(!_queue.empty())
{
int cur = _queue.front();
_queue.pop();
for(auto m:adj[cur])
{
if(gr[m] != -1)
{
if(gr[m] == gr[cur]) return false;
else continue;
}
gr[m] = (gr[cur] + 1)%2;
_queue.push(m);
}
}
}
return true;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> t;
while(t--)
{
cin >> v >> e;
for(int i =1; i<=v;i++)
adj[i].clear();
for(int i = 0; i < e; i++)
{
cin >> u >> w;
adj[u].push_back(w);
adj[w].push_back(u);
}
if(solve()) cout << "YES\n";
else cout << "NO\n";
}
}
'코딩테스트준비 > 다시볼문제' 카테고리의 다른 글
백준 11779. 최소비용 구하기 2 (다익스트라) (0) | 2023.08.14 |
---|---|
백준 1753. 최단 경로 (다익스트라) (0) | 2023.08.14 |
백준 21939. 문제 추천 시스템 Version 1 (이진검색트리) (0) | 2023.07.19 |
백준 1202. 보석 도둑 (그리디, 이진검색트리) (0) | 2023.07.19 |
백준 1106. 호텔 (DP) (0) | 2023.07.16 |
Comments