博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[SHOI2009] 交通网络
阅读量:4569 次
发布时间:2019-06-08

本文共 1198 字,大约阅读时间需要 3 分钟。

 

 

   简单最短路计数。

 

#include
#define ll long longusing namespace std;#define D doubleconst int N=305,M=100005;int to[M],ne[M],hd[N],Man[N][N];int n,m,d[N][N];ll f[N][N];D ans[M];inline void BFS(int x){ queue
q; int y; d[x][x]=f[x][x]=1; q.push(x); while(!q.empty()){ y=q.front(),q.pop(); for(int i=hd[y];i;i=ne[i]) if(!d[x][to[i]]){ d[x][to[i]]=d[x][y]+1; f[x][to[i]]=f[x][y]; q.push(to[i]); } else if(d[x][to[i]]>d[x][y]) f[x][to[i]]+=f[x][y]; } for(int i=1;i<=n;i++) d[x][i]--;}inline void solve(){ for(int i=1;i<=n;i++) BFS(i); for(int i=1;i<=n;i++) for(int j=hd[i];j;j=ne[j]){ int u=i,v=to[j]; for(int a=1;a<=n;a++) for(int b=1;b<=n;b++) if(Man[a][b]&&f[a][b]&&d[a][u]+d[v][b]+1==d[a][b]) ans[j>>1]+=f[a][u]*f[v][b]*(ll)Man[a][b]/(D)f[a][b]; }}int main(){ scanf("%d%d",&n,&m); int uu,vv; for(int i=1;i<=m;i++){ scanf("%d%d",&uu,&vv); to[2*i]=vv,ne[2*i]=hd[uu],hd[uu]=2*i; to[2*i+1]=uu,ne[2*i+1]=hd[vv],hd[vv]=2*i+1; } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&Man[i][j]); solve(); for(int i=1;i<=m;i++) printf("%.1lf\n",ans[i]); return 0;}

  

转载于:https://www.cnblogs.com/JYYHH/p/9167325.html

你可能感兴趣的文章
java面试题 网络编程_java面试题《三、网络编程》
查看>>
java布尔矩阵程序_Java编程学习摘要(2)语法基础
查看>>
java no wait_即使队列在activemq中不为空,JMS实现中的receiveNoWait也返回null
查看>>
java定义player类_简易扑克牌游戏 定义了Constants、Main、Player、Poker四个类
查看>>
java方法重载例题_Java方法重载实现原理及代码实例
查看>>
java 字符串 包含 次数_用JAVA写查询一个字符串中是否包含另外一个字符串以及出现的次数...
查看>>
java jvm arg_java – Ant,jvmarg,系统属性和引号
查看>>
karp算法Java_Java – 具有Held和Karp算法的旅行推销员
查看>>
Session共享问题---理论
查看>>
Redis键的基本操作
查看>>
redis的安装---Linux
查看>>
Redis过期命令
查看>>
Redis键的序列化和反序列化
查看>>
启动程序添加启动脚本
查看>>
CF1194E Count The Rectangles
查看>>
Gym100212C Order-Preserving Codes
查看>>
ARC076F Exhausted
查看>>
TC1570 DesertWind
查看>>
CF277D Google Code Jam
查看>>
(七)unittest单元测试框架
查看>>