Pagini recente » Cod sursa (job #2355783) | Cod sursa (job #287951) | Cod sursa (job #700078) | Cod sursa (job #111998) | Cod sursa (job #1214480)
#include<fstream>
#include<iostream>
#include<queue>
#include<bitset>
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");
struct nod{
int info;
int cost;
nod *urm;
};
nod* graf[30009];
queue<int> coada;
bitset<30009> viz;
int n,m,start,finish,sol[30009];
void adauga(nod *&p,int dest,int cst)
{
nod *nou = new nod;
nou->info = dest;
nou->cost = cst;
nou->urm = p;
p = nou;
}
void read()
{
in>>n>>m>>start>>finish;
int x,y,c;
for( ; m ; --m){
in>>x>>y>>c;
adauga(graf[x],y,c);
adauga(graf[y],x,c);
}
}
void bfs()
{
coada.push(start);
nod *i;
viz[start] = 1;
int vrf;
while(!coada.empty()){
vrf = coada.front();
for(i = graf[vrf] ; i != NULL ; i = i->urm){
if(!viz[i->info]){
if(vrf < i->info)
sol[i->info] = sol[vrf] + i->cost;
else
sol[i->info] = sol[vrf] - i->cost;
viz[i->info] = 1;
coada.push(i->info);
}
}
coada.pop();
}
}
int main()
{
viz.reset();
read();
int x1 = max(start,finish);
int x2 = min(start,finish);
finish = x1;
start = x2;
bfs();
out<<sol[finish];
return 0;
}