1 条题解

  • 1
    @ 2024-5-12 16:45:42
    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=1e4+10;
    
    int d[101][101];
    double sum[101][101];
    int main(){
    	int n,m;
    	cin>>n>>m;
    	int a,b,c;
    	memset(d,0x3f3f3f3f,sizeof(d));
    	for(int i=1;i<=m;i++){
    		cin>>a>>b>>c;
    		d[a][b]=c;
    		d[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=i+1;j<=n;j++){
    				if(i!=k&&j!=k)
    				if(d[i][k]+d[k][j]<d[i][j]){
    					d[i][j]=d[i][k]+d[k][j];
    					d[j][i]=d[i][j];
    					sum[i][j]=sum[i][k]*sum[k][j];
    					sum[j][i]=sum[i][j];
    				}
    				else if(d[i][k]+d[k][j]==d[i][j]){
    					sum[i][j]+=sum[i][k]*sum[k][j];
    					sum[j][i]=sum[i][j];
    				}
    			}
    	for(int i=1;i<=n;i++){
    		double ans=0;
    		for(int j=1;j<=n;j++){
    			for(int k=1;k<=n;k++){
    				if(j!=i&&k!=i&&d[i][j]+d[i][k]==d[k][j]){
    					ans+=(sum[i][j]*sum[i][k])/sum[j][k];
    				}
    			}
    		}
    		printf("%.3lf\n",ans);
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    149
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者