Cod sursa(job #801015)

Utilizator cremarencodianaCremarenco Diana cremarencodiana Data 23 octombrie 2012 09:08:30
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
# include <vector>
# include <stdio.h>
# define mk make_pair
using namespace std;
vector < pair<int, int> > list[30005];
int n,m,i,j,q[70000],x,y,a,b,c,p,u,drum[30005];
bool viz[30005];
void bfs()
{
	int nod;
	while(p<=u)
	{
		nod=q[p];
		for (unsigned int i=0;i<list[nod].size();i++)
		{
			int next_nod=list[nod][i].first;
            int cost=list[nod][i].second;
			if (viz[next_nod]==false)
			{
				u++;
				q[u]=next_nod;
				viz[next_nod]=true;
				drum[next_nod]=drum[nod]+cost;
				if (next_nod==y) {return;}
			}
		}
		p++;
	}
}

int main()
{
	freopen("sate.in","r",stdin);
	freopen("sate.out","w",stdout);
	scanf("%d %d %d %d\n",&n,&m,&x,&y);
	for (i=1; i<=m; i++)
	{
		scanf("%d %d %d\n",&a,&b,&c);
		list[a].push_back(mk(b,c));
		list[b].push_back(mk(a,-c));
	}
	drum[x]=0;
	p=u=1;
	viz[x]=true;
	q[1]=x;
	bfs();
	printf("%d\n",drum[y]);
	return 0;
}