#include #include #include using namespace std; const int INF = 100001;//别爆 int main(){ //dp的分阶段依据总写在最外层(最优子结构和重叠子问题的子问题分段) int n, edge_num, start, end; cin >> n >> edge_num >> start >> end; //相关存储 //vector> edge(edge_num); vector> dp(n, vector(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; }