BOJ 1865 μν
·486 words·3 mins
π λ¬Έμ μ 보 # λ§ν¬: https://www.acmicpc.net/problem/1865 π§ κ΄μ°° λ° μ κ·Ό # 무ν₯μΈ λλ‘μ μ ν₯μΈ μνμ΄ μκ³ , μμ μ¬μ΄ν΄μ΄ μλμ§λ₯Ό 체ν¬νλ λ¬Έμ μ΄λ€. $N \leq 500$μΌλ‘ ν¬μ§ μμΌλ―λ‘, νλ‘μ΄λ μμ
λ μΆ©λΆν λλ€. μ΄κ±΄ $O(N^3)$ νμ§λ§ 벨λ§ν¬λλ‘ $O(VE)$λ‘ λ λΉ λ₯΄κ²λ ν μ μλ€. 벨λ§ν¬λκ° λλ€λ건 SPFAλ‘λ λ λΉ λ₯΄κ² ν μ μλ€! λ€ ν΄λ³Έ κ²°κ³Ό, νλ‘μ΄λμμ
μ΄ 496ms, 벨λ§ν¬λκ° 24ms, SPFAκ° 12msκ° λμλ€. π» νμ΄ # μ½λ (C++): void solve(){ int N, M, W; cin >> N >> M >> W; vector<vector<ll>> cost(N, vector<ll>(N, 1e15)); rep(i, 0, N) cost[i][i] = 0; rep(i, 0, M){ ll u, v, w; cin >> u >> v >> w; u--; v--; cost[u][v] = min(cost[u][v], w); cost[v][u] = min(cost[v][u], w); } rep(i, 0, W){ ll u, v, w; cin >> u >> v >> w; u--; v--; cost[u][v] = min(cost[u][v], -w); } rep(k, 0, N) rep(i, 0, N) rep(j, 0, N) cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j]); rep(i, 0, N) if(cost[i][i] < 0){ cout << "YES\n"; return; } cout << "NO\n"; } π ꡬν μ½λ μ κΈ