38 lines
828 B
C++
38 lines
828 B
C++
#include <iostream>
|
|
#include <vector>
|
|
#include <tuple>
|
|
using namespace std;
|
|
const int INF = 100001;//别爆
|
|
int main(){
|
|
//dp的分阶段依据总写在最外层(最优子结构和重叠子问题的子问题分段)
|
|
int n, edge_num, start, end;
|
|
cin >> n >> edge_num >> start >> end;
|
|
//相关存储
|
|
//vector<tuple<int, int, int>> edge(edge_num);
|
|
vector<vector<int>> dp(n, vector<int>(n, INF));
|
|
|
|
for(int i = 0; i < edge_num; i++){
|
|
int a, b, w;
|
|
cin >> a >> b >> w;
|
|
//edge[i] = {a, b, w};
|
|
dp[a][b] = w;
|
|
}
|
|
|
|
//dp, 一定把k写最外面
|
|
for(int k = 0; k < n; k++){
|
|
for(int i = 0; i < n; i++){
|
|
for(int j = 0; j < n; j++){
|
|
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]);
|
|
}
|
|
}
|
|
}
|
|
for(int k = 0; k < n; k++){
|
|
if(dp[k][k] < 0){
|
|
cout << "Negative Cycle Detected!" << endl;
|
|
return 0;
|
|
}
|
|
}
|
|
cout << dp[start][end] << endl;
|
|
return 0;
|
|
}
|