Cod sursa(job #363538)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 13 noiembrie 2009 17:55:59
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <cstdio>
#include <vector>
#include <cstring>

using namespace std;

#define file_in "sate.in"
#define file_out "sate.out"

int n,m,i,X,Y,d[30100],a[101000],b[100100],c[101000],ok;

int main()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d %d %d", &n, &m, &X, &Y);
	
    memset(d,0,sizeof(d));
    
    for (i=1;i<=m;++i)
    {
        scanf("%d %d %d\n", &a[i],&b[i],&c[i]);
        if (a[i]==X)
            d[b[i]]=c[i];
		if (b[i]==X)
			d[a[i]]=-c[i];
    }
    
    for (i=2;i<=n;++i)
          if (d[i]==0)
              d[i]=0x3f3f3f3f; 
    
    ok=0;
    while(!ok)
    {
        ok=1;  
        for (i=1;i<=m;++i)
        {
			if (d[b[i]]>d[a[i]]+c[i])
                d[b[i]]=d[a[i]]+c[i],
                  ok=0;
		    if (d[a[i]]>d[b[i]]-c[i])
				d[a[i]]=d[b[i]]-c[i],
                  ok=0;	 
		}				  
			  	  
    }
		
	printf("%d", d[Y]);
		
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}