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
- Bruth Force
- JavaScript
- CSV
- programmers
- hash table
- 알고리듬
- Vue.js
- 구현
- Data Structure
- 코테
- Back tracking
- DFS
- aws
- 코딩테스트
- Trie
- 알고리즘
- 모의SW역량테스트
- BFS
- 시뮬레이션
- Algorithm
- gpdb
- Python
- Linked list
- boj
- Priority Queue
- SQL
- GitHub
- spring boot
- SWEA
- django
Archives
- Today
- Total
hotamul의 개발 이야기
[Algorithm][C++] BOJ 1707: 이분 그래프 본문
myt-algorithm-practice/Samsung SW Certi Pro
[Algorithm][C++] BOJ 1707: 이분 그래프
hotamul 2021. 11. 19. 23:19url: https://www.acmicpc.net/problem/1707
1707번: 이분 그래프
입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에
www.acmicpc.net
풀이 핵심
1. dfs/bfs 문제
2. 문제는 매우 간단하지만 Pro 시험에서 Linked List 자료구조는 필수로 구현할 줄 알아야 하므로 Linked List를 이용해 풀이해보고자 한다. 이 문제는 바이러스 문제와 달리 초기화를 해줘야 한다. linked list 구현은 바이러스 문제와 같고 (Tail 포인터를 사용하지 않고) 초기화 함수만 추가된 것이다.
3. linked list 구현은 바이러스 문제에서 확인해보자. dfs 구현은 코드에서 확인해 보자.
코드
#include <cstdio>
#define MAXV 20001
#define MAXE 200000
int K, V, E;
struct NODE {
int node;
NODE* next;
};
NODE HEAD[MAXV];
NODE POOL[MAXE * 2];
int check[MAXV];
int pcnt;
void init() {
pcnt = 0;
for (int i = 1; i <= V; i++) HEAD[i].next = 0, check[i] = 0;
}
void make(int p, int c) {
NODE* nd = &POOL[pcnt++];
nd->node = c;
nd->next = HEAD[p].next;
HEAD[p].next = nd;
}
int dfs(int node, int color) {
check[node] = color;
for (NODE* p = HEAD[node].next; p; p = p->next) {
if (check[p->node] == color) return 0;
if (!check[p->node]) {
if (!dfs(p->node, 3 - color)) return 0;
}
}
return 1;
}
int main() {
scanf("%d", &K);
for (int tc = 1; tc <= K; tc++) {
int flag;
scanf("%d %d", &V, &E);
init();
for (int i = 0; i < E; i++) {
int p, c;
scanf("%d %d", &p, &c);
make(p, c);
make(c, p);
}
for (int i = 1; i <= V; i++) {
if (check[i] == 0) {
flag = dfs(i, 1);
if (!flag) break;
}
}
if (flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}
'myt-algorithm-practice > Samsung SW Certi Pro' 카테고리의 다른 글
[Algorithm][C++] BOJ 1620: 나는야 포켓몬 마스터 이다솜 (Hash Table - Chaining (Single Linked List) (0) | 2021.11.22 |
---|---|
[Algorithm][C++] BOJ 3190: 뱀 (Double Linked List) (0) | 2021.11.21 |
[Algorithm][C++] BOJ 2606: 바이러스 (head, tail Linked List) (0) | 2021.11.20 |
[Data Structure][C++] Linked List (0) | 2021.11.19 |
[Algorithm][C++] BOJ 2606: 바이러스 (head Linked List) (0) | 2021.11.19 |
Comments