2 条题解
-
0
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=110,inf=0x3f3f3f3f; int f[N][N]; double g[N][N]; int main() { int n,m;scanf("%d%d",&n,&m); memset(f,0x3f,sizeof(f)); memset(g,0,sizeof(g)); for(int i=1,x,y,c;i<=m;i++) { scanf("%d%d%d",&x,&y,&c); f[x][y]=min(f[x][y],c); f[y][x]=min(f[y][x],c); g[x][y]=g[y][x]=1; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(f[i][j]==f[i][k]+f[k][j]) { g[i][j]=g[i][j]+g[i][k]*g[k][j]; } else if(f[i][j]>f[i][k]+f[k][j]) { f[i][j]=f[i][k]+f[k][j]; g[i][j]=g[i][k]*g[k][j]; } } for(int k=1;k<=n;k++) { double ans=0; for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(i!=k&&j!=k&&i!=j) { if(f[i][j]==f[i][k]+f[k][j]) ans+=(g[i][k]*g[k][j])/g[i][j]; } printf("%.3lf\n",ans); } return 0; } -
0
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=110,inf=0x3f3f3f3f; int f[N][N]; double g[N][N]; int main() { int n,m;scanf("%d%d",&n,&m); memset(f,0x3f,sizeof(f)); memset(g,0,sizeof(g)); for(int i=1,x,y,c;i<=m;i++) { scanf("%d%d%d",&x,&y,&c); f[x][y]=min(f[x][y],c); f[y][x]=min(f[y][x],c); g[x][y]=g[y][x]=1; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(f[i][j]==f[i][k]+f[k][j]) { g[i][j]=g[i][j]+g[i][k]*g[k][j]; } else if(f[i][j]>f[i][k]+f[k][j]) { f[i][j]=f[i][k]+f[k][j]; g[i][j]=g[i][k]*g[k][j]; } } for(int k=1;k<=n;k++) { double ans=0; for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(i!=k&&j!=k&&i!=j) { if(f[i][j]==f[i][k]+f[k][j]) ans+=(g[i][k]*g[k][j])/g[i][j]; } printf("%.3lf\n",ans); } return 0; }
- 1
信息
- ID
- 1475
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 83
- 已通过
- 31
- 上传者