1 solutions

  • 0
    @ 2024-12-10 23:10:28

    C++ :

    #include<cstdio>
    #include<cstring>
    int n,m,q,x,y,v;
    int g[55][55][55]={0};
    int main(){
        scanf("%d%d",&n,&m);
        memset(g,255,sizeof(g));
        for(int i=1;i<=m;i++){
            scanf("%d%d%d",&x,&y,&v);
            if(g[x][y][1]==-1||v<g[x][y][1]) g[x][y][1]=v;
        }
        for(int i=1;i<=n;i++) g[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(g[i][k][l-1]>-1&&g[k][j][1]>-1&&(g[i][j][l]==-1||g[i][j][l]>g[i][k][l-1]+g[k][j][1]))
                    		g[i][j][l]=g[i][k][l-1]+g[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(g[x][y][j]!=-1 && g[x][y][j]<Max*j)
    		  	Max=(double)g[x][y][j]/j;
    		}
            if(Max!=111111111) printf("%.3f\n",Max+0.000005);
    		else printf("OMG!\n");
        }
    }
    
    • 1

    Information

    ID
    590
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By