https://www.acmicpc.net/problem/1976
λ¬Έμ
λνμ΄λ μΉκ΅¬λ€κ³Ό ν¨κ» μ¬νμ κ°λ €κ³ νλ€. νκ΅μλ λμκ° Nκ° μκ³ μμμ λ λμ μ¬μ΄μ κΈΈμ΄ μμ μλ, μμ μλ μλ€. λνμ΄μ μ¬ν μΌμ μ΄ μ£Όμ΄μ‘μ λ, μ΄ μ¬ν κ²½λ‘κ° κ°λ₯ν κ²μΈμ§ μμ보μ. λ¬Όλ‘ μ€κ°μ λ€λ₯Έ λμλ₯Ό κ²½μ ν΄μ μ¬νμ ν μλ μλ€. μλ₯Ό λ€μ΄ λμκ° 5κ° μκ³ , A-B, B-C, A-D, B-D, E-Aμ κΈΈμ΄ μκ³ , λνμ΄μ μ¬ν κ³νμ΄ E C B C D λΌλ©΄ E-A-B-C-B-C-B-DλΌλ μ¬νκ²½λ‘λ₯Ό ν΅ν΄ λͺ©μ μ λ¬μ±ν μ μλ€.
λμλ€μ κ°μμ λμλ€ κ°μ μ°κ²° μ¬λΆκ° μ£Όμ΄μ Έ μκ³ , λνμ΄μ μ¬ν κ³νμ μν λμλ€μ΄ μμλλ‘ μ£Όμ΄μ‘μ λ κ°λ₯νμ§ μ¬λΆλ₯Ό νλ³νλ νλ‘κ·Έλ¨μ μμ±νμμ€. κ°μ λμλ₯Ό μ¬λ¬ λ² λ°©λ¬Ένλ κ²λ κ°λ₯νλ€.
μ λ ₯
첫 μ€μ λμμ μ Nμ΄ μ£Όμ΄μ§λ€. Nμ 200μ΄νμ΄λ€. λμ§Έ μ€μ μ¬ν κ³νμ μν λμλ€μ μ Mμ΄ μ£Όμ΄μ§λ€. Mμ 1000μ΄νμ΄λ€. λ€μ Nκ°μ μ€μλ Nκ°μ μ μκ° μ£Όμ΄μ§λ€. iλ²μ§Έ μ€μ jλ²μ§Έ μλ iλ² λμμ jλ² λμμ μ°κ²° μ 보λ₯Ό μλ―Ένλ€. 1μ΄λ©΄ μ°κ²°λ κ²μ΄κ³ 0μ΄λ©΄ μ°κ²°μ΄ λμ§ μμ κ²μ΄λ€. Aμ Bκ° μ°κ²°λμμΌλ©΄ Bμ Aλ μ°κ²°λμ΄ μλ€. λ§μ§λ§ μ€μλ μ¬ν κ³νμ΄ μ£Όμ΄μ§λ€. λμμ λ²νΈλ 1λΆν° NκΉμ§ μ°¨λ‘λλ‘ λ§€κ²¨μ Έ μλ€.
μΆλ ₯
첫 μ€μ κ°λ₯νλ©΄ YES λΆκ°λ₯νλ©΄ NOλ₯Ό μΆλ ₯νλ€.
νμ΄
Floyd-Warshall
λ‘ κ΅¬ν πβοΈ
λ€λ₯Έ μ μ κΈ°μ‘΄μμλ i == j μΈ λΆλΆμ κ°μ μ μ₯νμ§ μμ§λ§, μ΄ λ¬Έμ μμλ μ΄λκ°λ₯νλ€λΌλ μλ―Έλ‘ 1λ‘ μ΄κΈ°ν ν΄μ£Όμλ°μ βΌοΈ
μ½λ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main_BOJ_1976_μ¬νκ°μ {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer;
int n = Integer.parseInt(br.readLine());
int m = Integer.parseInt(br.readLine());
int[][] floyd = new int[n][n];
int[] cities = new int[m];
for(int i = 0 ; i < n ; i++){
stringTokenizer = new StringTokenizer(br.readLine());
for(int j = 0 ; j < n; j++){
floyd[i][j] = Integer.parseInt(stringTokenizer.nextToken());
if(i == j)
floyd[i][j] = 1;
}
}
stringTokenizer = new StringTokenizer(br.readLine());
for(int i = 0 ; i < m ; i++){
cities[i] = Integer.parseInt(stringTokenizer.nextToken()) - 1;
}
for(int k = 0 ; k < n ; k++){
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < n ; j++){
if(floyd[i][k] == 1 && floyd[k][j] == 1)
floyd[i][j] = 1;
}
}
}
boolean flag = true;
for(int i = 0; i < m-1 ; i++){
if(floyd[cities[i]][cities[i+1]] == 0){
flag = false;
break;
}
}
System.out.println(flag ? "YES" : "NO");
}
}
'μκ³ λ¦¬μ¦ > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ λ°±μ€ / BOJ 2776 ] μκΈ°μ ( μλ° / JAVA ) (0) | 2021.10.21 |
---|---|
[ λ°±μ€ / BOJ 17451 ] νν μ°μ£Ό ( μλ° / JAVA ) (0) | 2021.10.21 |
[ λ°±μ€ / BOJ 1967 ] νΈλ¦¬μ μ§λ¦ ( μλ° / JAVA ) (0) | 2021.10.20 |
[ λ°±μ€ / BOJ 2729 ] μ΄μ§μ λ§μ ( μλ° / JAVA ) (0) | 2021.10.19 |
[ λ°±μ€ / BOJ 2469 ] μ¬λ€λ¦¬ νκΈ° ( μλ° / JAVA ) (0) | 2021.10.19 |