Floyd


#include 
using namespace std;
const int N = 210, INF = 0x3f3f3f3f;
int d[N][N], n, m, q;
void Floyd(){
	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[k][j]);
}
int main(){
	cin >> n >> m >> q;
	for (int i = 1; i <= n; i ++ )
		for (int j = 1; j <= n; j ++ )
			if (i == j) d[i][j] = 0;
			else d[i][j] = INF;
	for (int i = 1; i <= m; i ++ ){
		int u, v, w;
		cin >> u >> v >> w;
		d[u][v] = min(d[u][v], w);
	}
	Floyd();
	while (q--){
		int u, v;
		cin >> u >> v;
		if (d[u][v] >= INF / 2) cout << "impossible\n";
		else cout << d[u][v] << "\n";
	}
	return 0;
}

acwing 模板:https://www.acwing.com/problem/content/856/