Cod sursa(job #1134067)

Utilizator cosmin_bobeicaCosmin Bobeica cosmin_bobeica Data 5 martie 2014 22:43:26
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include<cstdio>
#include<climits>
#include<vector>
#include<set>

using namespace std;

typedef vector<int>v;
typedef pair<int,int>p;
typedef vector<p>vp;
typedef vp::iterator it;

int n,m,s,t;

vp ve[50001];
v d(50001,INT_MAX);

void Dijkstra()
{
    set<p> q;
    
    d[1]=0;
    q.insert( p(0,1) );
    
    while( !q.empty() )
    {
        p top=*q.begin();
        q.erase( q.begin() );
        
        int dr,co;
        
        dr=top.second;
        co=top.first;
        
        for(it i=ve[dr].begin();i!=ve[dr].end();i++)
        {
            int vec,cost;
            
            vec=i->first;
            cost=i->second;
            
            if(d[vec]>d[dr]+cost)
            {
                if(d[vec]!=INT_MAX)
                    q.erase( q.find( p(d[vec],vec) ) );
                
                d[vec]=d[dr]+cost;
                q.insert( p(d[vec],vec) );
            }
        }
    }
};

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    
    scanf("%d%d",&n,&m);
    
    int a,b,c;
    
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        ve[a].push_back( p(b,c) );
        ve[b].push_back( p(a,c) );
    }
    
    Dijkstra();
    
    for(int i=2;i<=n;i++)
        printf("%d ",d[i]);
    
    
    return 0;
}