Pagini recente » Cod sursa (job #2194185) | Cod sursa (job #1160550) | Cod sursa (job #2668332) | Cod sursa (job #634894) | Cod sursa (job #2031996)
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <vector>
#include <queue>
#define INF 0x3f3f3f3f
using namespace std;
ifstream fi("sate.in");
ofstream fo("sate.out");
queue<int> q;
vector<pair<int,int> > ways[30005];
vector<int> graph[30005];
int dist[30005];
int a,b,c;
int GetDistance(int a,int b)
{
for(auto y:ways[a])
{
if(b== y.first)
return y.second;
}
}
void lee(int d)
{
q.push(d);
dist[d] = 0;
while(!q.empty())
{
int x = q.front();
q.pop();
for(auto y:graph[x])
{
if(dist[y] == INF)
{
int k = dist[x] - GetDistance(x,y);
int mk = dist[x] + GetDistance(x,y);
if(x>y)
{
dist[y] = k;
}
else if(x<y)
{
dist[y] = mk;
}
q.push(y);
}
}
}
}
int main()
{
int n,m,x,y;
fi>>n>>m>>x>>y;
for(int i=1;i<=m;++i)
{
fi>>a>>b>>c;
ways[a].push_back({b,c});
ways[b].push_back({a,c});
graph[a].push_back(b);
graph[b].push_back(a);
}
for(int i=1;i<=n;++i)
dist[i] = INF;
lee(x);
fo<<dist[y];
}