1543λ²: λ¬Έμ κ²μ
μΈμ€μ΄λ μμ΄λ‘λ§ μ΄λ£¨μ΄μ§ μ΄λ€ λ¬Έμλ₯Ό κ²μνλ ν¨μλ₯Ό λ§λ€λ €κ³ νλ€. μ΄ ν¨μλ μ΄λ€ λ¨μ΄κ° μ΄ λͺ λ² λ±μ₯νλμ§ μΈλ €κ³ νλ€. κ·Έλ¬λ, μΈμ€μ΄μ ν¨μλ μ€λ³΅λμ΄ μΈλ κ²μ λΉΌκ³ μΈμΌ ν
www.acmicpc.net
λ¬Έμ
μ΄λ€ λλΌμλ 1λ²λΆν° Nλ²κΉμ§μ λμμ Mκ°μ λ¨λ°©ν₯ λλ‘κ° μ‘΄μ¬νλ€. λͺ¨λ λλ‘μ 거리λ 1μ΄λ€.
μ΄ λ νΉμ ν λμ Xλ‘λΆν° μΆλ°νμ¬ λλ¬ν μ μλ λͺ¨λ λμ μ€μμ, μ΅λ¨ κ±°λ¦¬κ° μ νν KμΈ λͺ¨λ λμλ€μ λ²νΈλ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€. λν μΆλ° λμ Xμμ μΆλ° λμ Xλ‘ κ°λ μ΅λ¨ 거리λ νμ 0μ΄λΌκ³ κ°μ νλ€.
μλ₯Ό λ€μ΄ N=4, K=2, X=1μΌ λ λ€μκ³Ό κ°μ΄ κ·Έλνκ° κ΅¬μ±λμ΄ μλ€κ³ κ°μ νμ.
μ΄ λ 1λ² λμμμ μΆλ°νμ¬ λλ¬ν μ μλ λμ μ€μμ, μ΅λ¨ κ±°λ¦¬κ° 2μΈ λμλ 4λ² λμ λΏμ΄λ€. 2λ²κ³Ό 3λ² λμμ κ²½μ°, μ΅λ¨ κ±°λ¦¬κ° 1μ΄κΈ° λλ¬Έμ μΆλ ₯νμ§ μλλ€.
μ λ ₯
첫째 μ€μ λμμ κ°μ N, λλ‘μ κ°μ M, 거리 μ 보 K, μΆλ° λμμ λ²νΈ Xκ° μ£Όμ΄μ§λ€. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) λμ§Έ μ€λΆν° Mκ°μ μ€μ κ±Έμ³μ λ κ°μ μμ°μ A, Bκ° κ³΅λ°±μ κΈ°μ€μΌλ‘ ꡬλΆλμ΄ μ£Όμ΄μ§λ€. μ΄λ Aλ² λμμμ Bλ² λμλ‘ μ΄λνλ λ¨λ°©ν₯ λλ‘κ° μ‘΄μ¬νλ€λ μλ―Έλ€. (1 ≤ A, B ≤ N) λ¨, Aμ Bλ μλ‘ λ€λ₯Έ μμ°μμ΄λ€.
μΆλ ₯
Xλ‘λΆν° μΆλ°νμ¬ λλ¬ν μ μλ λμ μ€μμ, μ΅λ¨ κ±°λ¦¬κ° KμΈ λͺ¨λ λμμ λ²νΈλ₯Ό ν μ€μ νλμ© μ€λ¦μ°¨μμΌλ‘ μΆλ ₯νλ€.
μ΄ λ λλ¬ν μ μλ λμ μ€μμ, μ΅λ¨ κ±°λ¦¬κ° KμΈ λμκ° νλλ μ‘΄μ¬νμ§ μμΌλ©΄ -1μ μΆλ ₯νλ€.

νμ΄κ³Όμ
λ¬Έμ λ₯Ό μ²μ λ΄€μλ bfsλ‘ μ κ·Όν΄μΌκ² λ€λΌλ μκ°μ΄ μ°μ μ μΌλ‘ λ€μ΄μ bfsλ‘ μ κ·Όνμ¬ νμ΄λ³΄μμ΅λλ€.
code
#include <iostream>
#include <vector>
#include <queue>
std::vector <int> v[300001];
int visited[300001];
void bfs(int k, int x)
{
int temp, count = 0, Qsize;
std::queue <int> que;
std::priority_queue <int, std::vector<int>, std::greater<int> > answer;
que.push(x);
visited[x] = 1;
while (!que.empty())
{
Qsize = que.size();
count++;
for (int i = 0; i < Qsize; i++) {
temp = que.front();
que.pop();
for (int j = 0; j < v[temp].size(); j++) {
if (!visited[v[temp][j]]) {
if (count == k) answer.push(v[temp][j]);
else que.push(v[temp][j]);
visited[v[temp][j]] = true;
}
}
}
}
if (answer.size() == 0) std::cout << "-1" << "\n";
else {
while(!answer.empty()) {
std::cout << answer.top() << "\n";
answer.pop();
}
}
}
int main(void)
{
int n, m, k, x, a, b;
std::cin >> n >> m >> k >> x;
for(int i = 0; i < m; i++) {
std::cin >> a >> b;
v[a].push_back(b);
}
if (k == 0) std::cout << x << "\n";
else bfs(k, x);
return (0);
}
νκΈ°
μ΄μν κ³³μμ λ»μ§μ ν΄μ μκ°μ΄ λ무 λ§μ΄ μλΉν κ±° κ°μμ μμ½λ€λΌλ μκ°μ΄ λ€μλ€.
'Algorithm > λ¬Έμ νμ΄' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 15719λ² - μ€λ³΅λ μ«μ (C++) (0) | 2023.08.31 |
---|---|
[λ°±μ€] 1446λ² - μ§λ¦κΈΈ (C++) (0) | 2023.08.30 |
[λ°±μ€] 1543λ² - λ¬Έμ κ²μ (JS) (1) | 2023.08.28 |
[λ°±μ€] 2225λ² - ν©λΆν΄ (C++) (0) | 2023.08.27 |
[λ°±μ€] 2294λ² - λμ 2 (C++) (0) | 2023.08.26 |