ACM第四次練習—1013

題意:先給出了一個表格,這個表格也表示路程和花費的模板,然後根據這個對下面的問題進行解決,然後第三行給的是n,m,緊接着就是n行,表示的是0到1的距離,0到2的距離,0到3的距離。。。。依次下去。接下來的m行表示的就是要求的起點和終點了。

思路:直接用Dijkastra就ok了 稍稍做一點點的變形,要注意的本題數據比較大 在定義最大值常量的時候要注意 一開始還WA了好多遍 結果定義成const __int64 inf=0xffffffffffffff;就過了,輸入輸出也要用__int64 。

感想:變態,還要變形~

代碼:

#include <stdio.h>  

#include <string.h>  
#include <algorithm>  
using namespace std;  
const __int64 inf = 1e18;  
__int64 map[105][105];  
__int64 k[105];  
__int64 a[5];  
__int64 c[5];  
__int64 n,m;  
  
__int64 judge(__int64 x)  
{  
    if(x>0 && x<=a[1])  
        return c[1];  
    if(x<=a[2])  
        return c[2];  
    if(x<=a[3])  
        return c[3];  
    if(x<=a[4])  
        return c[4];  
    return inf;  
}  
  
__int64 kabs(__int64 a)  
{  
    return a<0?-a:a;  
}  
  
void floyd()  
{  
    __int64 i,j,k;  
    for(k = 1; k<=n; k++)  
        for(i = 1; i<=n; i++)  
            for(j = 1; j<=n; j++)  
                if(map[i][j]>map[i][k]+map[k][j])  
                    map[i][j] = map[i][k]+map[k][j];  
}  
  
int main()  
{  
    __int64 t,i,j,x,y,cas = 1;  
    scanf("%I64d",&t);  
    while(t--)  
    {  
        for(i = 1; i<=4; i++)  
            scanf("%I64d",&a[i]);  
        for(i = 1; i<=4; i++)  
            scanf("%I64d",&c[i]);  
        scanf("%I64d%I64d",&n,&m);  
        for(i = 1; i<=n; i++)  
            scanf("%I64d",&k[i]);  
        for(i = 0; i<=n; i++)  
        {  
            for(j = 0; j<=n; j++)  
                map[i][j] = inf;  
            map[i][i] = 0;  
        }  
        for(i = 1; i<=n; i++)  
            for(j = i; j<=n; j++)  
            {  
                map[i][j] = map[j][i] = judge(kabs(k[j]-k[i]));  
            }  
        floyd();  
        printf("Case %I64d:\n",cas++);  
        while(m--)  
        {  
            scanf("%I64d%I64d",&x,&y);  
            if(map[x][y] == inf)  
                printf("Station %I64d and station %I64d are not attainable.\n",x,y);  
            else  
                printf("The minimum cost between station %I64d and station %I64d is %I64d.\n",x,y,map[x][y]);  
        }  
    }  
  
    return 0;  
}  



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章