Bus System 我对自己无语了。。wa了n次原来输出格式搞错了。唉。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define inf 0x7f7f7f7f7f7f7f7fLL
__int64 map[110][110],cost[10],dis[10],sta[110];
int a,b,M,N,l=0;

__int64 exp(__int64 x)
{ 
  if(x==0)
  return 0;
  if(x>0&&x<=dis[1])
  return cost[1];
  else if(x<=dis[2])
  return cost[2];
  else if(x<=dis[3])
  return cost[3];
  else if(x<=dis[4])
  return cost[4];
  else 
  return inf;
}
void floyd( )
{
  int i,j,k,t;
  for(k=1;k<=M;k++)
    for(i=1;i<=M;i++)
      for(j=1;j<=M;j++)
        {
         if(map[k][j]!=inf&&map[i][k]!=inf&&map[i][j]>map[i][k]+map[k][j])
            map[i][j]=map[i][k]+map[k][j];
           
         }
}
void print(int a,int b)
{

if(map[a][b]!=inf)    
printf("The minimum cost between station %d and station %d is %I64d.\n",a,b,map[a][b]);
else
printf("Station %d and station %d are not attainable.\n",a,b);
} 
           

 
int main( )
{
  int P,i,j;
  scanf("%d",&N);
  while(N--)
  {
   l++;
   for(i=1;i<=4;i++)
   scanf("%I64d",&dis[i]);
   for(i=1;i<=4;i++)
   scanf("%I64d",&cost[i]);
   scanf("%d%d",&M,&P);
   for(i=1;i<=M;i++)
   scanf("%I64d",&sta[i]);
   for(i=1;i<=M;i++)
     for(j=i+1;j<=M;j++)
       map[i][j]=map[j][i]=exp(abs(sta[j]-sta[i]));
       floyd();
       printf("Case %d:\n",l); 
    for(i=1;i<=P;i++)
     {
         scanf("%d%d",&a,&b);
         print(a,b);        //刚开始时这里超时,我把floy 函数放里面了。悲剧。
     }
   }
   return 0;
   }

posted on 2011-05-01 20:18  more think, more gains  阅读(191)  评论(0编辑  收藏  举报

导航