Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

再来个,SPFA,79MS,为毛还慢些?

Posted by speedcell4 at 2011-08-21 23:06:14 on Problem 2387
In Reply To:Bellman_ford,32MS,优化中…… Posted by:speedcell4 at 2011-08-21 00:50:07
#include<iostream>
#include<queue>

using namespace std;

#define SIZE 10000
#define INF  ((1<<31)-1)

struct edge
{
    int u;
    int v;
    int w;
}a[SIZE];
bool v[SIZE];
int dist[SIZE];
queue<int> node;

int t,n;
int x,y,z,Ne=0;

void Init(int s0)
{
    memset(v,false,sizeof(v));
    for(int i=0;n-i>0;i++) dist[i]=INF;
    dist[s0]=0; v[s0]=true;
    node.push(s0);
}
int SPFA(int s0)
{
    Init(s0);
    while(!node.empty())
    {
        int now=node.front();node.pop();v[now]=false;
        for(int i=0;Ne-i>0;i++)
        {
            if(a[i].u==now&&dist[a[i].v]>dist[a[i].u]+a[i].w)
            {
                dist[a[i].v]=dist[a[i].u]+a[i].w;
                if(v[a[i].v]==false)
                {
                    v[a[i].v]=true;
                    node.push(a[i].v);
                }
            }
        }
    }
    return dist[n-1];
}   
int main()
{
    scanf("%d %d",&t,&n);
    for(int i=0;t-i>0;i++)
    {
        scanf("%d %d %d",&x,&y,&z);
        a[Ne].u=x-1;
        a[Ne].v=y-1;
        a[Ne++].w=z;
        
        a[Ne].u=y-1;
        a[Ne].v=x-1;
        a[Ne++].w=z;
    }
    printf("%d\n",SPFA(0));
    //system("pause");
    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator