1 条题解
-
0
C++ :
/* author :hzoi_ztx title : ALG : comment: [2014 10 16 test] */ #include <cstdio> #define maxn 102 #define sig -1 int n , m , g[maxn][maxn] ; double p[maxn][maxn] , ans[maxn] , tmp ; int main() { //#define READ #ifdef READ freopen("friend.in" ,"r",stdin ) ; freopen("friend.out","w",stdout) ; #endif //in int i , j , k , t ; scanf("%d%d", &n , &m ) ; for (i = 1 ; i <= n ; i ++ ) { for (j = 1 ; j <= n ; j ++ ) { p[i][j] = 1 ; g[i][j] = sig ; } ans[i] = 0 ; } while (m -- ) { scanf("%d%d%d", &i , &j , &k ) ; g[i][j] = g[j][i] = k ; } //求最短路 for (k = 1 ; k <= n ; k ++ ) { for (i = 1 ; i <= n ; i ++ ) { if (k == i) continue ; for (j = 1 ; j <= n ; j ++ ) { if (i == j || j == k) continue ; if (g[i][k] == sig || g[k][j] == sig) continue ; t = g[i][k]+g[k][j] ; tmp = p[i][k]*p[k][j] ; if (g[i][j] == sig || g[i][j] > t) { g[i][j] = t ; p[i][j] = tmp ; } else if (g[i][j] == t) p[i][j] += tmp ; } } } //计算答案 for (k = 1 ; k <= n ; k ++ ) { for (i = 1 ; i <= n ; i ++ ) { if (i == k) continue ; for (j = 1 ; j <= n ; j ++ ) { if (j==k || i==j) continue ; if (g[i][j] == g[i][k]+g[k][j]) ans[k] += p[i][k]*p[k][j]/p[i][j] ; } } } //out for (i = 1 ; i <= n ; i ++ ) printf("%.3f\n", ans[i] ) ; return 0 ; }
- 1
信息
- ID
- 960
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者