hdu 4650 Minimum Average Weight Path(最短路,5级)
来源:互联网 发布:网络电视浙江卫视 编辑:程序博客网 时间:2024/06/06 09:31
Minimum Average Weight Path
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 94 Accepted Submission(s): 46
Problem Description
In mathematics, a graph is a representation of a set of objects where some pairs of the objects are connected by links. The interconnected objects are represented by mathematical abstractions called vertices, and the links that connect some pairs of vertices are called edges. A path in a graph is a sequence of vertices, and for any 2 adjacent u, v, there is a edge from u to v in graph. A path contains at least one edge. In the graph in Sample 2, {3, 3, 2, 2} can form a path from 3 to 2.
One of the common problem is to find the shortest path between two certain vertices, or all of them. They've been well studied as the single source shortest path problem (SSSP) and the all pairs shortest paths problem (APSP).
In this problem, we'll provide you a derivation analogous to APSP. You've been given a directed graph with positive or negative edge weights. We define the average weight of a path, as the sum of the edge weights divide the edges number of path. Now you need to find the minimum average weight between all pairs of vertices (APMAWP).
Input
Muiltcases. The first line contains two integer n, m, (1 ≤ n ≤ 102, 1 ≤ m ≤ 104 ) the number of the vertices and the number of the edges.
The next m lines, each line contains three intergers u, v, w, representing a directed edge from u to v with weight w. (|w| ≤ 103)
There is no multi-edge. It can contain self-loops.
Output
A n × n matrix representing the APMAWP. The j's element of the i's row represents the minimum average weight of all the paths from vertex i to vertex j. If no such path exists, you need to output "NO" instead (DO NOT output quote please). For each real number, you need to keep exactly 3 digits after digit point.
Sample Input
4 42 1 21 3 -82 4 -64 3 15 83 3 7352 1 9464 2 2762 2 -9903 2 -1624 4 -183 5 7835 5 -156
Sample Output
NO NO -8.000 NO2.000 NO -3.000 -6.000NO NO NO NONO NO 1.000 NONO NO NO NO NO-990.000 -990.000 NO NO NO-990.000 -990.000 735.000 NO -156.000-990.000 -990.000 NO -18.000 NONO NO NO NO -156.000
Source
2013 Multi-University Training Contest 5
Recommend
zhuyuanchen52
思路:全源最短路,求平均边权最小,这个还是比较简单的,当时怎么没去看这题呢?
#include<iostream>#include<cstring>#include<cstdio>#define FOR(i,a,b) for(int i=a;i<=b;++i)#define clr(f,z) memset(f,z,sizeof(f))using namespace std;const int mm=103;const int oo=0x3f3f3f;int g[mm][mm],fg[mm][mm],t[mm][mm];int vis[mm][mm];//过几条边相见double ans[mm][mm];int n,m;void acopy(int(*a)[mm],int(*b)[mm]){ FOR(i,1,n)FOR(j,1,n)a[i][j]=b[i][j];}void mul(int(*a)[mm],int(*b)[mm],int lol){ acopy(t,a);FOR(i,1,n)FOR(j,1,n)a[i][j]=oo; FOR(i,1,n)FOR(j,1,n)FOR(k,1,n) { if(vis[i][k]==-1||lol<vis[i][k])continue; if(vis[k][j]==-1||lol<vis[k][j])continue; a[i][j]=min(a[i][j],t[i][k]+b[k][j]); }}void debug(int(*a)[mm]){ puts("+++++++++++++++++++++++"); FOR(i,1,n)FOR(j,1,n) { printf("%d ",a[i][j]); if(j==n)puts(""); } puts("+++++++++++++++++++++++++");}int main(){ int a,b,c; while(~scanf("%d%d",&n,&m)) { FOR(i,1,n)FOR(j,1,n)ans[i][j]=oo; clr(vis,-1);clr(g,0x3f); FOR(i,1,m) { scanf("%d%d%d",&a,&b,&c); g[a][b]=c;vis[a][b]=1; } FOR(k,1,n)FOR(i,1,n)if(vis[i][k]!=-1) FOR(j,1,n)if(vis[k][j]!=-1) { vis[i][j]=vis[i][j]==-1?vis[i][k]+vis[k][j]:min(vis[i][j],vis[i][k]+vis[k][j]); }///求出最少边相连 acopy(fg,g); FOR(k,1,n){FOR(i,1,n)FOR(j,1,n) if(vis[i][j]!=-1&&k>=vis[i][j])///边数需要大于等相遇最小边数 ans[i][j]=min(ans[i][j],(double)fg[i][j]/k); mul(fg,g,k);//debug(fg); }///K连边 FOR(k,1,n)FOR(i,1,n)if(vis[i][k]!=-1)FOR(j,1,n) if(vis[k][j]!=-1&&vis[k][k]!=-1) { ans[i][j]=min(ans[i][j],ans[k][k]); } FOR(i,1,n)FOR(j,1,n) { if(j>1)putchar(' '); if(vis[i][j]==-1)printf("NO"); else //cout<<ans[i][j]; printf("%.3lf",ans[i][j]); if(j==n)printf("\n"); } } return 0;}
- hdu 4650 Minimum Average Weight Path(最短路,5级)
- hdu 4650 Minimum Average Weight Path
- hdu 4650 Minimum Average Weight Path
- HDOJ 4650: Minimum Average Weight Path
- hdu 3631 Shortest Path(最短路)
- HDU 4479 Shortest path(最短路)
- HDU 5636 Shortest Path(最短路)
- HDU-1385 Minimum Transport Cost(最短路[Dijkstra])
- hdu 1385 Minimum Transport Cost(最短路+记录路径)
- hdu 1385 Minimum Transport Cost(最短路+输出路径)
- hdu 5385 The path(最短路+构造)
- HDU - 5636 Shortest Path (判断最短路)
- hdu 2807 The Shortest Path(最短路)
- hdu 4725 The Shortest Path in Nya Graph(堆+dij,最短路,5级)
- HDU 3631 Shortest Path 最短路
- HDU 3760 Ideal Path 最短路+BFS
- HDU 4479 Shortest path(最短路)
- 最短路->hdu 3631 Shortest Path
- 0-1 背包问题总结
- 删除控件,tag默认是0.不可以删除
- Linux下静态库的创建----ar命令的使用详解
- 怎样在XP上连接SQL数据库
- 学生信息管理系统小结(一)
- hdu 4650 Minimum Average Weight Path(最短路,5级)
- javaScript的预编译
- VB.NET_从DataGridview中导出EXCEL(2.效率)
- Java中的String类浅谈之一
- hdu 1003 Max Sum【一维数组最大连续和】
- 《这些年,我们读过的技术经典图书》主题有奖征文【已结束】
- Jquery发展
- RabbitMQ服务客户端的的业务逻辑
- EditView 文本提示信息