0
点赞
收藏
分享

微信扫一扫

19F Stockbroker Grapevine

eelq 2022-03-11 阅读 56
//floyd求多源最短路径
#include <iostream>
using namespace std;
const int inf = 0x3f3f3f3f;
int n, m;
int a, b;
int e[110][110];//二维数组存储数据
int main() {
	int i, j, k;
	while (cin >> n && n) {
		memset(e, inf, sizeof(e));
		for (i = 1; i <= n; i++)
			e[i][i] = 0;
		for (i = 1; i <= n; i++) {
			cin >> m;
			for (j = 1; j <= m; j++) {
				cin >> a >> b;
				e[i][a] = b;
			}
		}

		//Floyd求最短距离
		for (k = 1; k <= n; k++) {
			for (i = 1; i <= n; i++) {
				for (j = 1; j <= n; j++) {
					e[i][j] = min(e[i][j], e[i][k] + e[k][j]);
				}
			}
		}
		int ans = inf, sum , index;
		for (i = 1; i <= n; i++) {//以i为源点
			sum = 0;
			for (j = 1; j <= n; j++) {//找到最费时的j
				sum = max(e[i][j], sum);
			}
			if (sum < ans) {
				index = i;//记录索引
				ans = sum;//记录最小值
			}
		}
		if (ans == inf)
			cout << "disjoint\n" << endl;
		else
			cout << index << " " << ans << endl;
	}
	return 0;
}
举报

相关推荐

0 条评论