Cod sursa(job #553318)

Utilizator acelasi7Tudor Maxim acelasi7 Data 13 martie 2011 21:34:24
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<stdio.h>
#include<limits.h>
#include<vector>
#include<queue>
using namespace std;
#define nrn 30005
#define inf INT_MAX

struct nod{int nr,val;};
vector<nod>V[nrn];
queue<int>Q;
int n,D[nrn];

FILE *in=fopen("sate.in","r"),*out=fopen("sate.out","w");

int main()
{
    int x,y,c,m,pas,i,a,b;
    nod p;
    fscanf(in,"%d %d %d %d",&n,&m,&x,&y);
    for(i=1;i<=m;++i)
    {
        fscanf(in,"%d %d %d",&a,&b,&c);
        p.nr=a;
        p.val=c;
        V[b].push_back(p);
        p.nr=b;
        V[a].push_back(p);
    }
    for(i=1;i<=n;++i)
        D[i]=inf;
    Q.push(x);
    D[x]=0;
    while(!Q.empty())
    {
        pas=Q.front();
        Q.pop();
        for(i=0;i<V[pas].size();++i)
        {
            p=V[pas][i];
            if(p.nr<pas&&D[p.nr]>D[pas]-p.val)
            {
                D[p.nr]=D[pas]-p.val;
                Q.push(p.nr);
            }
            if(p.nr>pas&&D[p.nr]>D[pas]+p.val)
            {
                D[p.nr]=D[pas]+p.val;
                Q.push(p.nr);
            }
        }
    }
    fprintf(out,"%d\n",D[y]);
    return 0;
}