Pagini recente » Cod sursa (job #1735820) | Cod sursa (job #1551486) | Cod sursa (job #83465) | Borderou de evaluare (job #1136700) | Cod sursa (job #897593)
Cod sursa(job #897593)
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
#include<queue>
#define NMAX 30002
#define MMAX 100026
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");
vector <int>v[MMAX];
queue <int> cod;
int viz[NMAX],n,m,x,y;
struct graf
{
int cost,nod;
graf*next;
};
graf* a[NMAX];
void add(int where ,int what ,int cost)
{
graf*q =new graf;
q->nod=what;
q->cost=cost;
q->next=a[where];
a[where]=q;
}
void read ()
{
int z,b,p;
in>>n>>m>>x>>y;
for(int i=1; i<=m;++i)
{
in>>z>>b>>p;
v[z].push_back(b);
v[b].push_back(z);
add(z,b,p);
add(b,z,p);
}
}
int dist(int z,int nod)
{
graf*t=a[nod];
while(t)
{
if(z==t->nod)
return t->cost;
t=t->next;
}
}
int main ()
{ int nod,q=0;
read();
cod.push(x);
while(!cod.empty())
{
nod=cod.front();
cod.pop();
for(int j=0; j<v[nod].size(); ++j )
if(!viz[v[nod][j]] && v[nod][j]!=x)
{
cod.push(v[nod][j]);
if(nod>v[nod][j])
viz[v[nod][j]]=viz[nod]-dist(v[nod][j],nod);
else
viz[v[nod][j]]=viz[nod]+dist(v[nod][j],nod);
if(v[nod][j]==y)
{ q=1;
out<<viz[v[nod][j]];
break;
}
}
if(q==1)
break;
}
in.close();
out.close();
return 0;
}