Cod sursa(job #1268294)

Utilizator tytus11Trifon Titus tytus11 Data 20 noiembrie 2014 20:00:09
Problema Ubuntzei Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>

using namespace std;

FILE *f=fopen("ubuntzei.in","r");
FILE *g=fopen("ubuntzei.out","w");

int n,m,x[3020],y[3020],k[3020],dis[3020];

struct lis{lis *dr;int val,cost;};

lis *p[3020],*u[3020];

int main()
{
    int i,j,ok,sum,a,b,kk,c;
    fscanf(f,"%d%d%d",&n,&m,&kk);
    for(i=1;i<=kk;++i)
    fscanf(f,"%d",&k[i]);
    lis *nou,*aux;
    for(i=1;i<=m;++i)
    {
        fscanf(f,"%d%d%d",&a,&b,&c);
        aux=new lis;
        aux->val=b;
        aux->dr=0;
        aux->cost=c;
        if(!p[a])
        {
            p[a]=u[a]=aux;
        }
        else
        {
            u[a]->dr=aux;
            u[a]=aux;
        }
        aux=new lis;
        aux->val=a;
        aux->dr=0;
        aux->cost=c;
        if(!p[b])
        {
            p[b]=u[b]=aux;
        }
        else
        {
            u[b]->dr=aux;
            u[b]=aux;
        }
    }
    int inc,sf,co[3000];
    inc=sf=1;
    co[1]=1;
    dis[1]=1;
    aux=p[1];
    while(inc<=sf)
    {
        aux=p[co[inc]];
        while(aux)
        {
            if((dis[aux->val]>dis[co[inc]]+aux->cost)||(!dis[aux->val]))
            {
                dis[aux->val]=dis[co[inc]]+aux->cost;
                ++sf;
                co[sf]=aux->val;
            }
            aux=aux->dr;
        }
        ++inc;
    }
    fprintf(g,"%d",dis[n]-1);
    return 0;
}