https://www.acmicpc.net/problem/1865
1865λ²: μν
첫 λ²μ§Έ μ€μλ ν μ€νΈμΌμ΄μ€μ κ°μ TC(1 ≤ TC ≤ 5)κ° μ£Όμ΄μ§λ€. κ·Έλ¦¬κ³ λ λ²μ§Έ μ€λΆν° TCκ°μ ν μ€νΈμΌμ΄μ€κ° μ°¨λ‘λ‘ μ£Όμ΄μ§λλ° κ° ν μ€νΈμΌμ΄μ€μ 첫 λ²μ§Έ μ€μλ μ§μ μ μ N(1 ≤ N ≤ 500),
www.acmicpc.net
λ¬Έμ
λλ 2020λ , λ°±μ€μ΄λ μλλλΌμ ν κ΅λ―Όμ΄λ€. μλλλΌμλ Nκ°μ μ§μ μ΄ μκ³ Nκ°μ μ§μ μ¬μ΄μλ Mκ°μ λλ‘μ Wκ°μ μνμ΄ μλ€. (λ¨ λλ‘λ λ°©ν₯μ΄ μμΌλ©° μνμ λ°©ν₯μ΄ μλ€.) μνμ μμ μμΉμμ λμ°© μμΉλ‘ κ°λ νλμ κ²½λ‘μΈλ°, νΉμ΄νκ²λ λμ°©μ νκ² λλ©΄ μμμ νμμ λλ³΄λ€ μκ°μ΄ λ€λ‘ κ°κ² λλ€. μν λ΄μμλ μκ³κ° κ±°κΎΈλ‘ κ°λ€κ³ μκ°νμ¬λ μ’λ€.
μκ° μ¬νμ λ§€μ° μ’μνλ λ°±μ€μ΄λ ν κ°μ§ κΆκΈμ¦μ λΉ μ‘λ€. ν μ§μ μμ μΆλ°μ νμ¬μ μκ°μ¬νμ νκΈ° μμνμ¬ λ€μ μΆλ°μ νμλ μμΉλ‘ λμμμ λ, μΆλ°μ νμμ λλ³΄λ€ μκ°μ΄ λλμκ° μλ κ²½μ°κ° μλμ§ μλμ§ κΆκΈν΄μ‘λ€. μ¬λ¬λΆμ λ°±μ€μ΄λ₯Ό λμ μ΄λ° μΌμ΄ κ°λ₯νμ§ λΆκ°λ₯νμ§ κ΅¬νλ νλ‘κ·Έλ¨μ μμ±νμ¬λΌ.
μ λ ₯
첫 λ²μ§Έ μ€μλ ν μ€νΈμΌμ΄μ€μ κ°μ TC(1 ≤ TC ≤ 5)κ° μ£Όμ΄μ§λ€. κ·Έλ¦¬κ³ λ λ²μ§Έ μ€λΆν° TCκ°μ ν μ€νΈμΌμ΄μ€κ° μ°¨λ‘λ‘ μ£Όμ΄μ§λλ° κ° ν μ€νΈμΌμ΄μ€μ 첫 λ²μ§Έ μ€μλ μ§μ μ μ N(1 ≤ N ≤ 500), λλ‘μ κ°μ M(1 ≤ M ≤ 2500), μνμ κ°μ W(1 ≤ W ≤ 200)μ΄ μ£Όμ΄μ§λ€. κ·Έλ¦¬κ³ λ λ²μ§Έ μ€λΆν° M+1λ²μ§Έ μ€μ λλ‘μ μ λ³΄κ° μ£Όμ΄μ§λλ° κ° λλ‘μ μ 보λ S, E, T μΈ μ μλ‘ μ£Όμ΄μ§λ€. Sμ Eλ μ°κ²°λ μ§μ μ λ²νΈ, Tλ μ΄ λλ‘λ₯Ό ν΅ν΄ μ΄λνλλ° κ±Έλ¦¬λ μκ°μ μλ―Ένλ€. κ·Έλ¦¬κ³ M+2λ²μ§Έ μ€λΆν° M+W+1λ²μ§Έ μ€κΉμ§ μνμ μ λ³΄κ° S, E, T μΈ μ μλ‘ μ£Όμ΄μ§λλ° Sλ μμ μ§μ , Eλ λμ°© μ§μ , Tλ μ€μ΄λλ μκ°μ μλ―Ένλ€. Tλ 10,000λ³΄λ€ μκ±°λ κ°μ μμ°μ λλ 0μ΄λ€.
λ μ§μ μ μ°κ²°νλ λλ‘κ° ν κ°λ³΄λ€ λ§μ μλ μλ€. μ§μ μ λ²νΈλ 1λΆν° NκΉμ§ μμ°μλ‘ μ€λ³΅ μμ΄ λ§€κ²¨μ Έ μλ€.
μΆλ ₯
TCκ°μ μ€μ κ±Έμ³μ λ§μ½μ μκ°μ΄ μ€μ΄λ€λ©΄μ μΆλ° μμΉλ‘ λμμ€λ κ²μ΄ κ°λ₯νλ©΄ YES, λΆκ°λ₯νλ©΄ NOλ₯Ό μΆλ ₯νλ€.
νμ΄
μ°μ .. μ λ ₯μ΄ μλΉν 볡μ‘νκ² λμ€λ―λ‘ μμ λ₯Ό μ§μ 머리μμΌλ‘ ꡬνν΄λ³΄λ©° μ λ ₯ ννλ₯Ό μ νμ νμ

λλ‘,,, μν κ½€λ 볡μ‘ν΄λ³΄μ΄μ§λ§ κ²°λ‘ μ μΌλ‘λ
κ°μ€μΉλ₯Ό ν©νμλ μμκ° λμ€λ "μμμ¬μ΄ν΄" μ΄ μλμ§λ§ νμΈνλ©΄ λλ€
μμ κ°μ€μΉλ₯Ό μ§λ κ°μ μ΄ μμ λ μ΅λ¨κ²½λ‘λ₯Ό ꡬνκΈ° μν΄ λ²¨λ§-ν¬λ μκ³ λ¦¬μ¦μ μ¬μ©ν΄λ³΄λ©΄
[π² Altu-Bitu/1101 μ΅λ¨κ²½λ‘] - λ°±μ€ 11657λ²: νμλ¨Έμ
μ΅λ¨κ²½λ‘λ₯Ό ꡬνλ κ³Όμ μμ μμ μ¬μ΄ν΄μ λ°κ²¬νμ λ ν¨μλ₯Ό μ€λ¨ν΄μ€μΌνλ€.
μ΄ λΆλΆμ μ΄μ©νμ¬ λ³Έ λ¬Έμ μμλ μμμ¬μ΄ν΄μ μ‘΄μ¬ μ¬λΆλ§ μμλ΄λ©΄ λλ€.
κ½€ μ€λ κ³ λ―Όμ ν΅ν΄ νμλλ°,,
κ·Έ κ³ λ―Όμ νμ μ μ½λ μλ μνμ°©μ€μ.. γ γ
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <tuple>
using namespace std;
typedef tuple<int, int, int> tp;
const int INF = 6e7; // 걸리λ μκ°μ μ΅λκ° : κ°μ κ°―μ(2500+2500+500)*μκ°(10000) = 52e6
bool isThereNegativeCycle(int n, int path, vector<tp>&edges) {
vector<int> dist(n+1, INF);
for(int i=1; i<=n; i++) {
for(int j=0; j<path; j++) {
int s, d, w;
tie(s,d,w) = edges[j];
int next_weight = dist[s] + w;
if(next_weight < dist[d]) {
dist[d] = next_weight;
if(i==n)
return true;
}
}
}
return false;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int tc, n,m,w, s,e,t;
cin >> tc;
while(tc--) {
// μ
λ ₯
cin >> n >> m >> w;
vector<tp> edges; // κ°μ μ 보 μ μ₯
for(int i=0; i<m; i++) { // λλ‘μ 보 μ
λ ₯λ°κΈ° (μλ°©ν₯)
cin >> s >> e >> t;
edges.push_back({s, e, t});
edges.push_back({e, s, t});
}
for(int i=0; i<w; i++) { // μνμ 보 μ
λ ₯λ°κΈ° (λ¨λ°©ν₯)
cin >> s >> e >> t;
edges.push_back({s, e, t*-1});
}
// μΆλ ₯
if(isThereNegativeCycle(n, 2*m+w, edges))
cout << "YES\n";
else
cout << "NO\n";
}
return 0;
}
/*
*/
μνμ°©μ€ 1
μμ λ μ λλλ° 5% μ λμμ νλ Έμ΅λλ€ κ° λ¨λκ²½μ°,
μμμ μ΄ λ¨μ λμ΄μμ΄μ μμμ¬μ΄ν΄μ΄ λμ€μ§ μμ κ²½μ°λ₯Ό κ³ λ €νμ
μνμ°©μ€ 2
μ μνμ°©μ€1μ κ²ͺκ³ ,
μ²μμλ λͺ¨λ μ μ 벨λ§ν¬λ(λ€μ΅μ€νΈλΌ)μ μμμ μΌλ‘ λλ €λ³΄λ©° μμ μ¬μ΄ν΄μ μ°Ύμλλ°
94% μ λμμ μκ°μ΄κ³Ό κ° λ΄λ€.
// forλ¬ΈμΌλ‘ λλ €μ£ΌκΈ°
bool isThereNegativeCycle(int start, int n, int path, vector<tp>&edges) {
while(start <= n) {
vector<int> dist(n+1, INF);
dist[start] = 0;
for(int i=1; i<=n; i++) {
for(int j=0; j<path; j++) {
int s, d, w;
tie(s,d,w) = edges[j];
if(dist[s] == INF)
continue;
int next_weight = dist[s] + w;
if(next_weight < dist[d]) {
dist[d] = next_weight;
if(i==n)
return true;
}
}
}
start++;
}
return false;
}
// μ¬κ·ν¨μλ‘ λλ €λ³΄κΈ°
bool isThereNegativeCycle(int start, int n, int path, vector<tp>&edges) {
if(start>n) // λͺ¨λ μ μ μ μμμ μΌλ‘ ν΄λ΄€μμλ μμ¬μ΄ν΄μ΄ μλ€λ©΄
return false;
vector<int> dist(n+1, INF);
dist[start] = 0;
for(int i=1; i<=n; i++) {
for(int j=0; j<path; j++) {
int s, d, w;
tie(s,d,w) = edges[j];
if(dist[s] == INF)
continue;
int next_weight = dist[s] + w;
if(next_weight < dist[d]) {
dist[d] = next_weight;
if(i==n)
return true;
}
}
}
return isThereNegativeCycle(start+1, n, path, edges);
}
μ무λλ λ°λ³΅λ¬Έμ 3μ€μΌλ‘ λ리λ건 무리μλ€.
μκ°μ μ΄λ»κ² μ€μΌμ§λ§ κ³ λ―Όμ νλλ°,,
μκ³ λ³΄λ μμμ μ μ€μνμ§ μμλ€ (!)
λ³Έ μκ³ λ¦¬μ¦μ λλ €λ³΄λ©° μμμ¬μ΄ν΄μ΄ μλμ§λ§ νμΈνλ©΄ λκΈ° λλ¬Έμ
dist[start]=0 μΌλ‘ μ΄κΈ°ννλ κ³Όμ λ,
dist[d]==INF λ₯Ό νλ¨νλ κ³Όμ λ,
μ ν νμνμ§ μμλ€.
μ°Έκ³
https://4z7l.github.io/2021/03/04/algorithms-boj-1865.html
[C++ μκ³ λ¦¬μ¦] λ°±μ€ 1865λ² : μν - HERSTORY
벨λ§ν¬λ <!-- ### --> νμ΄κ³Όμ 벨λ§-ν¬λ μκ³ λ¦¬μ¦μ μ΄μ©ν΄ ν΄κ²°νμλ€. μκ°μ΄ μ€μ΄λ€λ©΄μ μΆλ° μμΉλ‘ λμμ€λ κ² μ λ³΄κ³ λ²¨λ§ν¬λλ₯Ό λ μ¬λ¦¬κΈ° λλ‘λ 무방ν₯μ΄λ―λ‘ μλ°©ν₯ κ°μ 2κ°λ₯Ό μΆκ°
4z7l.github.io
'ποΈ ICPC Sinchon > Shortest Path' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λ°±μ€ 11657λ²: νμλ¨Έμ (0) | 2022.11.03 |
---|---|
[BOJ G4][C++] λ°±μ€ 1719λ²: νλ°° (0) | 2022.11.03 |
λ°±μ€ 11404λ²: νλ‘μ΄λ (0) | 2022.11.03 |
[BOJ G4][C++] λ°±μ€ 10282λ²: ν΄νΉ (0) | 2022.11.01 |
λ°±μ€ 1753λ²: μ΅λ¨κ²½λ‘ (0) | 2022.11.01 |