1 solutions

  • 0
    @ 2024-12-10 23:09:55

    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