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 阅读(200) 评论(0) 收藏 举报
浙公网安备 33010602011771号