hdu-3790-最短路径问题(dijkstra算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790
在main函数开头加上 ios::sync_with_stdio(false) 就行了,理论上这个办法和用scanf差不多(学长教我的= =)不过我自己用的scanf是200多ms,用上面那句是500多ms orz
#include<iostream>
#include<cstdio>
#include<cstring>
#define INF 1000001
using namespace std;
int dis[1010],cost[1010][1010],visit[1010],map[1010][1010],cos[1010];
int main(void)
{
    int n,m,a,b,d,p,i,j,s,t,min,z;
    while(scanf("%d%d",&n,&m)==2&&(n+m))
    {
        memset(visit,0,sizeof(visit));
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=n; j++)
            {
                map[i][j]=INF;
                cost[i][j]=INF;
            }
        }
        while(m--)
        {
            scanf("%d%d%d%d",&a,&b,&d,&p);
            //cin>>a>>b>>d>>p;
            if(d<map[a][b])
            {
                map[a][b]=map[b][a]=d;
                cost[a][b]=cost[b][a]=p;
            }
            else if(d==map[a][b]&&p<cost[a][b])
            {
                cost[a][b]=cost[b][a]=p;
            }
        }
       scanf("%d%d",&s,&t);
       //cin>>s>>t;
        visit[s]=1;
        for(i=1; i<=n; i++)
        {
            dis[i]=map[s][i];
            cos[i]=cost[s][i];
        }
        for(i=1; i<=n; i++)
        {
            min=INF;
            for(j=1; j<=n; j++)
            {
                if(!visit[j]&&min>dis[j])
                {
                    z=j;
                    min=dis[j];
                }
            }
            visit[z]=1;
            for(j=1; j<=n; j++)
            {
                if(!visit[j]&&dis[j]>dis[z]+map[z][j])
                {
                    dis[j]=dis[z]+map[z][j];
                    cos[j]=cos[z]+cost[z][j];
                }
                else if(!visit[j]&&dis[j]==dis[z]+map[z][j]&&cos[j]>cos[z]+cost[z][j])
                {
                    cos[j]=cos[z]+cost[z][j];
                }
            }
        }
        printf("%d %d\n",dis[t],cos[t]);
    }
    return 0;
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号