50分求调!!#1,#3,#5,#8,#9没过
查看原帖
50分求调!!#1,#3,#5,#8,#9没过
1056402
hedgehog1211楼主2024/6/13 17:40
#include <bits/stdc++.h>
using namespace std;
int n, m;
double I[105];
long long f[105][105], d[105][105];


int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			f[i][j] = 0x3f3f3f3f;
		}
		f[i][i] = 0;
	}
	for (int i = 1; i <= m; i++) {
		int u, v;
		double k;
		cin >> u >> v >> k;
		f[u][v] = k;
		d[u][v]++;
		d[v][u]++;
		f[v][u] = 1;
	}
	for (int k = 1; k <= n; k++) {

		for (int i = 1; i <= n; i++) {
			if (i == k)
				continue;

			for (int j = 1; j <= n; j++) {
				if (i == j || j == k)
					continue;
				if (f[i][j] > f[i][k] + f[k][j]) {
					f[i][j] = f[i][k] + f[k][j];
					d[i][j] = d[i][k] * d[k][j];
				} else if (f[i][k] + f[k][j] == f[i][j]) {
					d[i][j] += d[i][k] * d[k][j];
				}

			}
		}
	}

	for (int k = 1; k <= n; k++) {
		for (int i = 1; i <= n; i++) {
			if (i == k)
				continue;
			for (int j = 1; j <= n; j++) {
				if (i == j || j == k)
					continue;
				if (f[i][k] + f[k][j] == f[i][j]) {
					I[k] += (d[i][k] * d[k][j] ) * 1.0 / d[i][j] * 1.0;
				}
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		cout << fixed << setprecision(3) << I[i] << '\n';

	}


	return 0;
}
2024/6/13 17:40
加载中...