Cod sursa(job #916731)

Utilizator cont_testeCont Teste cont_teste Data 16 martie 2013 20:29:13
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>

#define MAX_SIZE 30005
#define dist second
#define INF 1<<30
#define TYPE pair<int,int>

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

using namespace std;

vector <TYPE> G[MAX_SIZE];
vector<TYPE>::iterator it;
int result,dist[MAX_SIZE],a[MAX_SIZE];
int n,m,x,y;

void read( void )
{
	fscanf(f,"%d%d%d%d",&n,&m,&x,&y);
	for(int i(0); i < m ; ++i)
	{
		int s1,s2,dist;
		fscanf(f,"%d%d%d",&s1,&s2,&dist);
		
		G[s1].push_back(make_pair(s2,dist));
		G[s2].push_back(make_pair(s1,-dist));	
	    
	}
	fclose(f);
	
	
}
void BFS()
{
	int k=1;
	memset(dist,-1,sizeof(dist));
	dist[x]=0;
	a[1]=x;
	for(int i(1); i<=k; i++)
	{
		for(int ii(0); ii <G[a[i]].size(); ii++)
		{
			
			int node=G[a[i]][ii].first;
			 if(dist[node] == -1 )
			 {
				 dist[node]=G[a[i]][ii].second+dist[a[i]];
				 if(node == y)
					 return ;
				 a[++k]=node;
			 }
			
			
			
		}
		
		
		
		
	}
	
	
}

void write( void )
{
	fprintf(g,"%d",dist[y]);
	fclose(g);
	
}
int main( void )
{
	read();
	BFS();
	write();
	return 0;
}