Pagini recente » Cod sursa (job #2973672) | Cod sursa (job #3151513) | Cod sursa (job #2666226) | Cod sursa (job #892944) | Cod sursa (job #1833041)
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>
#include <queue>
#include <iterator>
#define Nmax 30010
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
int n,m,dist[Nmax],x,y;
vector <pair<int,int> > adj[Nmax];
void bfs(int x)
{
int v,cost;
dist[x]=0;
queue<pair<int,int> > q;
q.push(make_pair(0,x));
while(!q.empty())
{
v=q.front().second;
cout << v << "\n";
cost=q.front().first;
q.pop();
for(vector<pair<int,int> >::iterator it=adj[v].begin();it!=adj[v].end();it++)
{
if(dist[it->second]> it->first + cost)
{
dist[it->second]=it->first+cost;
q.push(make_pair(dist[it->second],it->second));
if(it->second==y)
return;
}
}
}
}
int main()
{
f >> n >> m >> x >> y;
int v,w,cost;
for(int i=1;i<=m;i++)
{
f >> v >> w >> cost;
adj[v].push_back(make_pair(cost,w));
adj[w].push_back(make_pair(-cost,v));
}
for(int i=1;i<=n;i++)
dist[i]=INT_MAX;
bfs(x);
g << dist[y] << "\n";
return 0;
}