Cod sursa(job #360786)

Utilizator allynaAlina S allyna Data 1 noiembrie 2009 22:07:50
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<cstdio>
#include<vector>
using namespace std;
vector <short int> a[30002];
vector <int> v[30002];
int d[30002],n,m;
short int x,y;
char sat[35];
short int c[30002],xx,yy,y1;
int i,num,j,in=1,sf,u;
void solve()
{
	in=1;
	sf=0;
	c[++sf]=x;
	while(d[y]==0)
	{
		x=c[in++];
		u=a[x].size();
		for(i=0;i<u;i++)
		{
			y1=a[x][i];
			if(d[y1]==0)
			{
				num=v[x][i];
				if(x<y1)
					d[y1]=d[x]+num;
				else
					d[y1]=d[x]-num;
				c[++sf]=y1;
			}
		}
	}
 
 }
int main()
{
	freopen("sate.in","r",stdin);
	freopen("sate.out","w",stdout);
	scanf("%d%d%hd%hd\n",&n,&m,&x,&y);
	for(i=1;i<=m;i++)
	{
		gets(sat);
		xx=0;
		yy=0;
		num=0;
		for(j=0;sat[j]!=' ';j++)
			xx=xx*10+sat[j]-'0';
		for(++j;sat[j]!=' ';j++)
			yy=yy*10+sat[j]-'0';
		for(++j;sat[j];j++)
			num=num*10+sat[j]-'0';
		a[xx].push_back(yy);
		a[yy].push_back(xx);
		v[xx].push_back(num);
		v[yy].push_back(num);
		}
	solve();
	printf("%d\n",d[y]);
	return 0;
}