?爆0
查看原帖
?爆0
1272630
Norton_brief楼主2025/7/30 11:50
#include<bits/stdc++.h>
using namespace std;
long long m,n,a[35],f[110][110];
double ans[110],sum[110][110];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			f[i][j]=1e13+2778;
		}
		f[i][i]=0;
	}
	for(int i=1;i<=m;i++){
		int a,b,c;cin>>a>>b>>c;
		f[a][b]=f[b][a]=c;
		sum[a][b]=sum[a][b]=1;
	}
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(i==j)continue;
				if(f[i][j]>f[i][k]+f[k][j]){
					f[i][j]=f[i][k]+f[k][j];
					sum[i][j]=sum[i][k]*sum[k][j];
				}
				else if(f[i][j]==f[i][k]+f[k][j]){
					sum[i][j]+=sum[i][k]*sum[k][j];
				}
			}
		}
	}
	for(int num=1;num<=n;num++){
		for(int s=1;s<=n;s++){
			for(int v=1;v<=n;v++){
				if(num==s||num==v||s==v||sum[s][v]==0)continue;
				if(f[s][v]==f[s][num]+f[num][v])
					ans[num]+=(sum[s][num]*sum[num][v])/sum[s][v];
			}
		}
	}
	for(int i=1;i<=n;i++)printf("%.3lf\n",ans[i]);
	return 0;
}
/*#include<bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
long long n, m;
long long f[155][155];
double sum[155][155];
double ans[155];

int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            f[i][j] = INF;
            sum[i][j] = 0;
        }
    }
    for (int i = 1; i <= n; i++) {
        f[i][i] = 0;
    }
    for (int i = 1; i <= m; i++) {
        long long a, b, c;
        cin >> a >> b >> c;
        f[a][b] = min(f[a][b], c);
        f[b][a] = min(f[b][a], c);
        sum[a][b] = 1;
        sum[b][a] = 1;
    }
    for (int k = 1; k <= n; k++) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                if (i == j) continue;
                if (f[i][k] + f[k][j] < f[i][j]) {
                    f[i][j] = f[i][k] + f[k][j];
                    sum[i][j] = sum[i][k] * sum[k][j];
                } else if (f[i][k] + f[k][j] == f[i][j]) {
                    sum[i][j] += sum[i][k] * sum[k][j];
                }
            }
        }
    }
    for (int v = 1; v <= n; v++) {
        ans[v] = 0.0;
        for (int s = 1; s <= n; s++) {
            for (int t = 1; t <= n; t++) {
                if (s == v || t == v || s == t) continue;
                if (f[s][t] == f[s][v] + f[v][t]) {
                    if (sum[s][t] != 0) {
                        ans[v] += (sum[s][v] * sum[v][t]) / sum[s][t];
                    }
                }
            }
        }
    }
    for (int i = 1; i <= n; i++) {
        printf("%.3lf\n", ans[i]);
    }
    return 0;
}
*/
2025/7/30 11:50
加载中...