Pagini recente » Cod sursa (job #1932419) | Cod sursa (job #413710) | Cod sursa (job #1218598) | Cod sursa (job #181978) | Cod sursa (job #897541)
Cod sursa(job #897541)
#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;
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(nod==y)
{
out<<viz[nod];
break;
}
}
in.close();
out.close();
return 0;
}