※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 25195번 문제인 Yes or yes이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/25195
25195번: Yes or yes
첫째 줄에는 정점의 개수 $N$과 간선의 개수 $M$이 주어진다. ($1 \leq N, M \leq 100\,000$) 이후 $M$줄에 걸쳐서 간선의 정보를 나타내는 두 정수 $u$, $v$ 가 주어진다. 이는 정점 $u$ 에서 정점 $v$ 로 가는
www.acmicpc.net
주어지는 그래프는 DAG이므로, 사이클이 존재하지 않는다는 점을 적극 이용하여 풀이를 간단하게 만들자.
구체적으로 1번 노드에서 출발해 팬클럽 곰곰이를 만나면서 더 아래로 내려갈 수 있는 노드가 없는 노드까지 도달하는 경로가 존재한다면 yes, 그렇지 않다면 YES를 출력하자.
위와 같은 경로는 DFS나 BFS 등의 그래프 탐색 알고리즘으로 쉽게 탐색해볼 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <vector>
using namespace std;
bool gomgom[100001];
vector<int> G[100001];
bool ans = 1;
void dfs(int cur) {
if (G[cur].empty()) ans = 0;
for (auto& node : G[cur]) {
if (gomgom[node]) continue;
dfs(node);
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N, M; cin >> N >> M;
while (M--) {
int u, v; cin >> u >> v;
G[u].emplace_back(v);
}
G[0].emplace_back(1);
int S; cin >> S;
while (S--) {
int x; cin >> x;
gomgom[x] = 1;
}
dfs(0);
if (ans) cout << "Yes";
else cout << "yes";
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 14010 // C++] Where To Go? (0) | 2022.05.16 |
---|---|
[BOJ 25193 // C++] 곰곰이의 식단 관리 (0) | 2022.05.15 |
[BOJ 25200 // C++] 곰곰이와 자판기 (0) | 2022.05.15 |
[BOJ 25191 // C++] 치킨댄스를 추는 곰곰이를 본 임스 (0) | 2022.05.15 |
[BOJ 25196 // C++] 숲속에서 새 구경하기 (0) | 2022.05.15 |