题面

先跑一边Floyd乘法原理统计任意两点间最短路数目,然后再枚举一次按照题意即可求出答案,会写那道JSOI2007就会这个

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
long long n,m,t1,t2,t3;
long long mat[N][N],cnt[N][N];
double ans[N];
int main ()
{
scanf("%lld%lld",&n,&m);
memset(mat,0x3f,sizeof mat);
for(int i=;i<=m;i++)
{
scanf("%lld%lld%lld",&t1,&t2,&t3);
mat[t1][t2]=mat[t2][t1]=t3;
cnt[t1][t2]=cnt[t2][t1]=;
}
for(int i=;i<=n;i++) mat[i][i]=;
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i!=j&&i!=k&&j!=k)
{
if(mat[i][j]>mat[i][k]+mat[k][j])
{
mat[i][j]=mat[i][k]+mat[k][j];
cnt[i][j]=cnt[i][k]*cnt[k][j];
}
else if(mat[i][j]==mat[i][k]+mat[k][j])
cnt[i][j]+=cnt[i][k]*cnt[k][j];
}
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i!=j&&i!=k&&j!=k)
if(mat[i][k]+mat[k][j]==mat[i][j])
ans[k]+=(double)cnt[i][k]*cnt[k][j]/cnt[i][j];
for(int i=;i<=n;i++)
printf("%.3lf\n",ans[i]);
return ;
}

最新文章

  1. 【译】AS3利用CPU缓存
  2. 转载--How to Install VMware Tools on CentOS 6.3
  3. Android Studio使用教程(一)(转)
  4. C# Thread.Join()用法的理解 转
  5. 字典树trie的学习与练习题
  6. 深入浅出之Smarty模板引擎工作机制(二)
  7. 转 java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException
  8. Rxjava observeOn()和subscribeOn()初探
  9. Eclipse CDT开发环境搭建及问题记录(Windows)
  10. sublime高亮代码导出
  11. Python开发【第十六篇】:AJAX全套(转)
  12. Matplotlib画正弦余弦曲线
  13. 版本控制工具之git
  14. LINUX涉及网络相关知识
  15. svg(一)
  16. DMA与cache一致性的问题
  17. NGINX 资料
  18. 【Redis】Redis-benchmark测试Redis性能
  19. 纯CSS + 媒体查询实现网页导航特效
  20. [BZOJ1974][SDOI2010]代码拍卖会[插板法]

热门文章

  1. 【python 3.6】类:访问属性及调用方法
  2. nohup命令详解
  3. node 集群与稳定
  4. linux命令系列 stat &amp; touch
  5. linux, configure --prefix 的作用
  6. centos下配置gitosis服务器遇到的困难
  7. java第四次实验报告
  8. jsp九大内置对象之config 和 out
  9. C++作业 一
  10. 09_Java面向对象_第9天(类、封装)_讲义