Pagini recente » Cod sursa (job #261277) | Cod sursa (job #1760931) | Cod sursa (job #929656) | Cod sursa (job #566941) | Cod sursa (job #2190216)
#include <bits/stdc++.h>
using namespace std;
int n,m,i,j,x,y,a,b,c,X,Y;
vector <int> v[30010];
vector <int> d[30010];
bool viz[30010];
int dis[30010];
//ifstream in("sate.in");
//ofstream out("sate.out");
#define DIM 10000
char buff[DIM];
int poz=0;
void citeste(int &numar)
{
numar=0;
while (buff[poz]<'0' || buff[poz]>'9')
if(++poz== DIM)
fread(buff,1,DIM,stdin),poz=0;
while ('0'<=buff[poz] && buff[poz]<='9')
{
numar=numar*10+buff[poz]-'0';
if (++poz == DIM)
fread(buff,1,DIM,stdin),poz=0;
}
}
int main()
{
FILE *fin,*fout;
fin=fopen("sate.in","r");
fout=fopen("sate.out","w");
fscanf(fin,"%d%d%d%d",&n,&m,&x,&y);
for(i=1;i<=m;i++)
{
fscanf(fin,"%d%d%d",&a,&b,&c);
v[a].push_back(b);
v[b].push_back(a);
d[a].push_back(c);
d[b].push_back(c);
}
X=min(x,y);
Y=max(y,x);
dis[X]=0;
queue <int> q;
q.push(X);
viz[X]=1;
while(!dis[Y])
{
int curr=q.front();
q.pop();
for(int i=0;i<v[curr].size() && !dis[Y];i++)
if(!viz[v[curr][i]])
{
viz[v[curr][i]]=1;
q.push(v[curr][i]);
if (v[curr][i]<curr) dis[v[curr][i]]=dis[curr]-d[curr][i];
else dis[v[curr][i]]=dis[curr]+d[curr][i];
}
}
fprintf(fout,"%d",dis[Y]);
fclose(fin);
fclose(fout);
return 0;
}