Pagini recente » Cod sursa (job #1961861) | Cod sursa (job #1098592) | Cod sursa (job #1497417) | Cod sursa (job #84349) | Cod sursa (job #1256536)
#include <fstream>
#include <iostream>
#include <queue>
#include <list>
// Using STL now
using namespace std;
class path
{
public:
int to;
long dist;
/*path *next;
void deleteNext()
{
path * toDelete = next;
if (toDelete != NULL)
{
next = toDelete->next;
delete toDelete;
}
}*/
};
char visited[30002];
list<path> adiacList[30002];
int n;
long calcDist(int x, int y)
{
queue<path> q;
path roads;
roads.to = x;
roads.dist = 0;
q.push(roads);
visited[x] = 1;
list<path>::iterator it, endIt;
int i;
long int d;
while (!q.empty())
{
roads = q.front();
i = roads.to;
d = roads.dist;
q.pop();
if (i == y)
{
return d;
}
for (it = adiacList[i].begin(), endIt = adiacList[i].end(); it != endIt; ++it)
{
if (!visited[it->to])
{
visited[roads.to = it->to] = 1;
roads.dist = (i < it->to) ? (d + it->dist) : (d - it->dist);
q.push(roads);
}
}
}
return -1;
}
int main()
{
//FILE *fin = fopen("sate.in", "r");
//FILE *fout = fopen("sate.out", "w");
ifstream fin("sate.in");
ofstream fout("sate.out");
long m;
int i, j, d, x, y;
//fscanf(fin, "%d %d", &n, &m);
fin >> n >> m >> x >> y;
path temp;
while (m--)
{
fin >> i >> j >> d;
temp.dist = d;
temp.to = j;
adiacList[i].push_back(temp);
temp.to = i;
adiacList[j].push_back(temp);
//fscanf(fin, "%d %d", &i, &j);
}
m = calcDist(x, y);
//cout << m;
fout << m << "\n";
//fclose(fin);
//fclose(fout);
return 0;
}