Cod sursa(job #873206)

Utilizator miadaradiciDaradici Mia miadaradici Data 6 februarie 2013 22:39:05
Problema Ubuntzei Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 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[2001];
long d[2002], vector[2002],v[2002],k,val[2002];
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;
}