1 solutions
-
0
C++ :
#include <cstdio> #include <cstring> int n,m,q; int a[55][55][55]={0}; int main() { int i,j,k,l; scanf("%d%d",&n,&m); int x,y,z; memset(a,255,sizeof(a)); for(i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); if(a[x][y][1]==-1||z<a[x][y][1]) a[x][y][1]=z; } for(i=1;i<=n;i++) a[i][i][0]=0; for(int l=2;l<=n;l++) { for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(a[i][k][l-1]>-1&&a[k][j][1]>-1&&(a[i][j][l]==-1||a[i][j][l]>a[i][k][l-1]+a[k][j][1])) { a[i][j][l]=a[i][k][l-1]+a[k][j][1]; } } } } } scanf("%d",&q); for(int i=1;i<=q;i++) { scanf("%d%d",&x,&y); double max=111111111; for(int j=0;j<=n;j++) { if(a[x][y][j]!=-1 && a[x][y][j]<max*j) max=(double)a[x][y][j]/j; } if(max!=111111111) { printf("%.3f\n",max+0.000005); } else printf("OMG!\n"); } return 0; }
Pascal :
type bian=record y,next,len:longint; end; var n,m,x,y,z,i,j,k,w,b,l:longint; f:array[0..50,0..50,0..50] of longint; ans:array[0..50,0..50] of double; max:double; begin readln(n,m); fillchar(f,sizeof(f),63); for i:=1 to m do begin readln(x,y,z); if z<f[x,y,1] then f[x,y,1]:=z; end; readln(w); for i:=1 to n do f[i,i,0]:=0; for l:=2 to n do for k:=1 to n do for i:=1 to n do for j:=1 to n do if f[i,k,l-1]+f[k,j,1]<f[i,j,l] then f[i,j,l]:=f[i,k,l-1]+f[k,j,1]; for i:=1 to n do for j:=1 to n do begin max:=100000; for l:=1 to n do if f[i,j,l]/l<max then max:=f[i,j,l]/l; ans[i,j]:=max; end; for i:=1 to w do begin readln(x,y); if ans[x,y]=100000 then writeln('OMG!'); if ans[x,y]<>100000 then writeln(ans[x,y]:0:3); end; close(input); close(output); end.
- 1
Information
- ID
- 585
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By