Pagini recente » Cod sursa (job #676249) | Cod sursa (job #19502) | Cod sursa (job #1671318) | Cod sursa (job #2880374) | Cod sursa (job #2951476)
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <algorithm>
#include <utility>
#include <cmath>
#include <map>
#include <deque>
#include <vector>
#include <set>
#include <queue>
#include <bitset>
#include <limits.h>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
const int MAX_SIZE = 30000;
int villages, date, start, finish;
vector<pair<pair<int, int>, int>> intervals;
map<pair<int, int>, int> foundInterval;
void calcDist() {
for (pair<pair<int, int>, int> interv : intervals) {
int left = interv.first.first;
int right = interv.first.second;
int dist = interv.second;
if (left == start && right == finish) {
fout << dist;
return;;
}
for (pair<pair<int, int>, int> interv : intervals) {
int left2 = interv.first.first;
int right2 = interv.first.second;
int dist2 = interv.second;
if (right == left2) {
pair<int, int> interval = make_pair(left, right2);
if (!foundInterval[interval]) {
foundInterval[interval] = 1;
intervals.push_back(make_pair(interval, dist + dist2));
}
} else if (right == right2) {
pair<int, int> interval = make_pair(left, left2);
if (!foundInterval[interval]) {
foundInterval[interval] = 1;
intervals.push_back(make_pair(interval, dist - dist2));
}
} else if (left == left2) {
pair<int, int> interval = make_pair(right, right2);
if (!foundInterval[interval]) {
foundInterval[interval] = 1;
intervals.push_back(make_pair(interval, dist2 - dist));
}
}
}
}
calcDist();
}
int main() {
ios_base::sync_with_stdio(false);
fin >> villages >> date >> start >> finish;
for (int i = 1; i <= date; ++i) {
int left, right, dist;
fin >> left >> right >> dist;
pair<int, int> interval = make_pair(left, right);
foundInterval[interval] = 1;
intervals.push_back(make_pair(interval, dist));
}
calcDist();
}