Submission #1129435

#TimeUsernameProblemLanguageResultExecution timeMemory
1129435ChuanChenCommuter Pass (JOI18_commuter_pass)C++20
24 / 100
33 ms1160 KiB
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

const int lim = 3e2+5;
const ll inf = 1e18;

int n, m, S, T, U, V;
ll ans = inf;

// struct Edge{
// 	int a, b, c;
// };
// Edge edges[2*lim];
// vector<int> adj[lim], weight[lim], idx[lim];

ll d[lim][lim];
void addEdge(int a, int b, int c, int i){
	d[a][b] = c;
	d[b][a] = c;
}
int main(){
	cin.tie(0)->sync_with_stdio(0);
	cin >> n >> m;
	cin >> S >> T >> U >> V;
	assert(n <= 300);

	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			d[i][j] = inf;
		}
		d[i][i] = 0;
	}
	for(int i = 1; i <= m; i++){
		int a, b, c; cin >> a >> b >> c;
		addEdge(a, b, c, i);
	}

	for(int k = 1; k <= n; k++){
		for(int i = 1; i <= n; i++){
			for(int j = 1; j <= n; j++){
				d[i][j] = min(d[i][j], d[i][k]+d[j][k]);
			}
		}
	}
	ans = d[U][V];
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			if(d[S][i] + d[i][j] + d[j][T] == d[S][T]){
				ans = min({ans, d[U][i]+d[j][V], d[V][i]+d[j][U]});
			}
		}
	}
	cout << ans << '\n';

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...