HDU 4849 2014西安邀请赛 C题 Wow! Such City! 最短路

题意 :给你3个公式  给出x0,x1,y0,y1 算出矩阵 c在求出种类编号最小的数

种类编号= Di%m;  Di为0点到i点最短的距离;

思路:给你3个公式 

因为( i*n+j )差不多是n*(n-1)  

所以 X Y Z 都先算到n*(n-1)个

然后得到邻接矩阵

dijkstra得到最短路 d [ n ]

全部  %m  输出最小值

#include<stdio.h>
#include <stdlib.h>
#include <limits.h>
#include<string.h>
#define LL __int64
#define M 1000*1000+1111
LL cost[1022][1033];
LL x[M],y[M],d[M],z[M];
LL n,m;
bool used[M];
void dijkstra(LL s,LL V) // 邻接矩阵表示
{
    int i;
    for(i=0; i<=V; i++)
    {
        //初始化
        d[i]=INT_MAX;
        used[i]=false;
    }
    d[s]=0;
    while(true)
    {
        int u;
        int v=-1;
        // 在未使用过的顶点中选择一个距离最小的顶点
        for( u=0; u<V; u++)
        {
            if(!used[u]&&(v==-1 || d[u]<d[v]))
                v=u;
        }
        if(v==-1)  break;  //顶点全部使用过
        used[v]=true;
        for( u=0; u<V; u++)
        {
            // 更新从v点能到达的点的最短路
            d[u]=min(d[u],d[v]+cost[v][u]);
        }
    }
}
void init(){
    memset(used,false ,sizeof(used));
    memset(cost,0 ,sizeof(cost));
}
int main()
{
    while(scanf("%I64d",&n)!=EOF){
        init();
        int i,j;
        scanf("%I64d%I64d%I64d%I64d%I64d",&m,&x[0],&x[1],&y[0],&y[1]);
        z[0]=((x[0]*90123+y[0])%8475871+1);
        for(i=2; i<=n*n+n; i++){//得到X Y Z;
            x[i]= (12345 +( x[i-1]* 23456)% 5837501 + (x[i-2]* 34567)% 5837501 +( x[i-1] * x[i-2] * 45678)% 5837501) % 5837501;
            y[i]= (56789 + (y[i-1]* 67890)% 9860381+ (y[i-2]* 78901)% 9860381 + (y[i-1] * y[i-2] * 89012)% 9860381) % 9860381;
            z[i-1]=((x[i-1]*90123)%8475871+y[i-1])%8475871+1;    
        }
        for(i=0; i<n; i++){
            for(j=0; j<n; j++){
                if(i==j)
                    cost[i][j]=0;
                else
                    cost[i][j]=z[i*n+j];//得到矩阵
            }
        }
        dijkstra(0,n);//最短路
		LL ans[1033];
        for(i=1; i<n; i++)
            ans[i]=d[i]%m;
        LL minnn=INT_MAX;
        for(i=1;i<n;i++)
			minnn=min(minnn,ans[i]);
        printf("%I64d\n",minnn);

    }
    return 0;
}


posted @ 2014-07-08 18:48  kewowlo  阅读(182)  评论(0编辑  收藏  举报