Pagini recente » Cod sursa (job #2750477) | Cod sursa (job #1055587) | Cod sursa (job #3241723) | Cod sursa (job #2984634) | Cod sursa (job #864103)
Cod sursa(job #864103)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in ("sate.in");
ofstream out("sate.out");
struct pct{int nod,distanta;};
int const N=30005;
vector <pct> a[N];
int n,m,x,y,dx[N];
queue <int> q;
bool marcat[N];
void citireg()
{
int x,y,d; pct aux;
for(int i=1;i<=m;i++)
{
in>>x>>y>>d;
aux.nod=y; aux.distanta=d;
a[x].push_back(aux);
aux.nod=x; aux.distanta=d;
a[y].push_back(aux);
}
}
int distanta(int x, pct y)
{
if(x<y.nod) return dx[x]+y.distanta;
return dx[x]-y.distanta;
}
void bfs(int x)
{
q.push(x);
marcat[x]=true;
while(!q.empty())
{
x=q.front();
q.pop();
for(int i=0;i<a[x].size();i++)
{
pct y=a[x][i];
if(!marcat[y.nod])
{
marcat[y.nod]=true;
if((dx[y.nod]==0)||(dx[y.nod]>distanta(x,y)))
{dx[y.nod]=distanta(x,y); q.push(y.nod);}
}
}
}
}
int main()
{
in>>n>>m>>x>>y;
citireg();
bfs(x);
out<<dx[y]<<"\n";
return 0;
}