Cod sursa(job #873333)

Utilizator miadaradiciDaradici Mia miadaradici Data 7 februarie 2013 08:42:23
Problema Ubuntzei Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<fstream>
#include<iostream>
using namespace std;

ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
using namespace std;
long n,m;
struct muchie {long x,y,c;} a[10001];
long d[10002], vector[10002],v[10002],k,val[10002];
int verific ()
{
    int i;
    for ( i=1; i<=k; i++ )
        if ( v[vector[k]]==0 )
            return 0;
    return 1;
}
int exista ( int i )
{
    int j;
    for ( j=1; j<=k; j++ )
        if ( vector[j]==i )
            return 1;
    return 0;
}

int main()
{
    long i;
    f>>n>>m;
    f>>k;
    for ( i=1; i<=k; i++ )
        f>>vector[k];
    for( i=1;i<=m;i++ )
    {
        f>>a[i].x>>a[i].y>>a[i].c;
        if(a[i].x==1)
            d[a[i].y]=a[i].c;
    }

    for( i=1;i<=n;i++)
        if(d[i]==0)
            d[i]=250001;

    int gata=0;
    while(!gata)
    {
        gata=1;
        for( int i=1; i<=m; i++ )
        {
            if ( exista(i) && val[i]==0 )
            {
                gata=0;
                d[a[i].y]=d[a[i].x]+a[i].c;
                v[a[i].y]=1;
                val[i]=1;
            }
            else
            if(d[a[i].y]>d[a[i].x]+a[i].c)
            {
                gata=0;
                d[a[i].y]=d[a[i].x]+a[i].c;

            }
        }
    }
    g<<d[n];
    return 0;
}