-
[BOJ] 18352 νΉμ 거리μ λμ μ°ΎκΈ°_JAVASTUDY π/μκ³ λ¦¬μ¦ 2021. 2. 9. 09:57λ°μν
[λ¬Έμ ]
https://www.acmicpc.net/problem/1835218352λ²: νΉμ 거리μ λμ μ°ΎκΈ°
첫째 μ€μ λμμ κ°μ N, λλ‘μ κ°μ M, 거리 μ 보 K, μΆλ° λμμ λ²νΈ Xκ° μ£Όμ΄μ§λ€. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) λμ§Έ μ€λΆν° Mκ°μ μ€μ κ±Έμ³μ λ κ°
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μ μΆλ ₯νλ€.
[Solution]
- BFS(λλΉμ°μ νμ) λ¬Έμ
- Nμ μ΅λ 300,000 Mμ μ΅λ 1,000,000 μ΄λ―λ‘ μκ°λ³΅μ‘λ O(1,300,000)package boj18352_νΉμ 거리μλμμ°ΎκΈ°; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = s.nextInt(); //λμμ κ°μ int m = s.nextInt(); //λλ‘μ κ°μ int k = s.nextInt(); //거리 μ 보 int x = s.nextInt(); //μΆλ° λμμ λ²νΈ int[] distance = new int[300001]; ArrayList<ArrayList<Integer>> linkLst = new ArrayList<ArrayList<Integer>>(); //INIT link list & distance Array for(int i=0; i<=n; i++) { linkLst.add(new ArrayList<Integer>()); distance[i] = -1; } distance[x] = 0; //μΆλ°λμ->μΆλ°λμ 거리 for(int i=0; i<m; i++) { int a = s.nextInt(); int b = s.nextInt(); linkLst.get(a).add(b); //a->b λ¨λ°©ν₯ } //BFS Queue<Integer> queue = new LinkedList<Integer>(); queue.add(x); //μΆλ°λμx while(!queue.isEmpty()) { int tmp = queue.poll(); for(int i=0; i<linkLst.get(tmp).size(); i++) { int next = linkLst.get(tmp).get(i); //λ°©λ¬Ένμ μμΌλ©΄ if(distance[next] == -1) { distance[next] = distance[tmp]+1; //μΆλ°λμμμ nextλμκΉμ§ 거리 queue.add(next); } } } //μ΅λ¨κ±°λ¦¬==k check, λμλ²νΈ print boolean chk = false; for(int i=0; i<=n; i++) { if(distance[i] == k) { System.out.println(i); chk = true; } } if(!chk) System.out.println(-1); } }
λ°μν'STUDY π > μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] 15649~15652 Nκ³Ό M JAVA (0) 2021.02.15 [BOJ] 2887 νμ± ν°λ JAVA (0) 2021.02.09 [2021 μΉ΄μΉ΄μ€ λΈλΌμΈλ μ½λ©ν μ€νΈ] ν©μΉ νμ μκΈ JAVA (0) 2021.02.04 [SWEA] 2115 λ²κΏμ±μ·¨_JAVA (0) 2021.02.03 [BOJ] 14501 ν΄μ¬_JAVA (0) 2021.02.03