Cod sursa(job #1415530)

Utilizator sirbu11Sirbu Claudiu Cosmin sirbu11 Data 4 aprilie 2015 23:17:44
Problema Sate Scor 0
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.03 kb
#include<stdio.h>
#include<stdlib.h>
#include<iostream>

using namespace std;

int MAX=5000,s[100],d[100],p[100];

int main()
{

	int p1,q1,w1,n,m,x1,y1,min,y,j,a[400][400];

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

	fscanf(input,"%d",&n);

	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(i==j)
				a[i][j]=0;
			else
				a[i][j]=MAX;
		}
	}
	fscanf(input,"%d",&m);
	fscanf(input,"%d%d",&x1,&y1);

	for(int j=0;j<m;j++)
	{
		fscanf(input,"%d %d %d",&p1,&q1,&w1);
		a[p1][q1]=w1;
		a[q1][p1]=-w1;
	}
	s[x1]=1;

	for(int i=1;i<=n;i++)
	{
		d[i]=a[x1][i];
		if((i!=x1)&&(d[i]<MAX))
		{
			p[i]=x1;
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(j=1,min=MAX;j<=n;j++)
			if((s[j]==0)&&(d[j]<min))
			{
				min=d[j];
				y=j;
			}
			s[y]=1;

			for(int j=1;j<=n;j++)
			{
				if((s[j]==0)&&(d[j]>d[y]+a[y][j]))
				{
					d[j]=d[y]+a[y][j];
					p[j]=y;
				}
			}
	}
	if(p[y1]!=0)
		fprintf(output,"%d",d[y1]);
			else
		fprintf(output,"0");

}