Highway Project--ZOJ3946(最短路SPFA)

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5718

题目大意: n个点  m条边   每条边有一个时间和花费   0点是起始点   从0点到各个点 的最短时间  时间相同的最小花费   

还是做题少   到这种题 自己真的是一点思路都没

用SPFA就可以  

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<math.h>
#include<queue>
#include<vector>
#include<algorithm>
#include<iostream>

using namespace std;
#define N 500050
const double ESP = 1e-8;
const long long INF = (1ll<<60)-1;
#define memset(a,b) memset(a,b,sizeof(a))

struct node
{
    int v;
    long long cost,time;
    node(int v0=0, long long c=0, long long t=0) : v(v0),cost(c), time(t){}
};

vector<vector<node> >G;

int vis[N];
long long Time[N],Cost[N];
int n,m;



void SPFA()
{
    memset(vis,0);
    for(int i=0;i<n;i++)
    {
        Time[i]=Cost[i]=INF;
    }
    Time[0]=Cost[0]=0;
    queue<int>Q;
    Q.push(0);
    while(!Q.empty())
    {
        int q=Q.front();
        Q.pop();
        vis[q]=0;///这个忘了写wa到哭
        int len=G[q].size();
        for(int i=0;i<len;i++)
        {
            node p=G[q][i];
            if(Time[p.v]>Time[q]+p.time || (Time[p.v]==Time[q]+p.time && Cost[p.v]>p.cost))
            {
                Time[p.v]=Time[q]+p.time;
                Cost[p.v]=p.cost;
                if(!vis[p.v])
                {
                    vis[p.v]=1;
                    Q.push(p.v);
                }
            }
        }
    }
    long long int aa,bb;
    aa=bb=0;
    for(int i=1;i<n;i++)
    {
        aa+=Time[i];
        bb+=Cost[i];
    }
    printf("%lld %lld
",aa,bb);
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        
        scanf("%d %d",&n,&m);
        G.clear();
        G.resize(n+2);
        for(int i=0;i<m;i++)
        {
            int u,v;
            long long int time,cost;
            scanf("%d %d %lld %lld",&u,&v,&time,&cost);
            G[u].push_back(node(v,cost,time));
            G[v].push_back(node(u,cost,time));
        }
        SPFA();
    }
    return 0;
}
原文地址:https://www.cnblogs.com/linliu/p/5443876.html