diff options
Diffstat (limited to '12/TP-HN-2009/R2/BAI2.CPP')
-rw-r--r-- | 12/TP-HN-2009/R2/BAI2.CPP | 58 |
1 files changed, 0 insertions, 58 deletions
diff --git a/12/TP-HN-2009/R2/BAI2.CPP b/12/TP-HN-2009/R2/BAI2.CPP deleted file mode 100644 index a47760f..0000000 --- a/12/TP-HN-2009/R2/BAI2.CPP +++ /dev/null @@ -1,58 +0,0 @@ -#include <iostream> -#include <fstream> -#include <functional> -#include <map> -#include <queue> -#include <vector> - -#define ENC(distance, current, coupon) (((distance) << 14) + ((current) << 1) + coupon) -#define DEC_D(data) ((data) >> 14) -#define DEC_C(data) ((data) >> 1 & 0b1111111111111) -#define DEC_B(data) ((data) & 1) - -using namespace std; - -int -main() -{ - ifstream infile; - infile.open("BAI2.INP"); - int n, m; - infile >> n >> m; - map<long long, map<long long, long long>> c; - long long k, i, j, l; - for (k = 0; k < m; k++) - { - infile >> i >> j >> l; - c[i][j] = l; - } - infile.close(); - - priority_queue<long long, vector<long long>, greater<long long>> q; - for (auto& item : c[1]) - { - q.push(ENC(item.second, item.first, 1)); - q.push(ENC(0, item.first, 0)); - } - - long long tmp; - while (!q.empty()) - { - tmp = q.top(); - q.pop(); - if (DEC_C(tmp) == n) - break; - for (auto& item : c[DEC_C(tmp)]) - q.push(ENC(DEC_D(tmp) + item.second, item.first, DEC_B(tmp))); - if (DEC_B(tmp)) - for (auto& item : c[DEC_C(tmp)]) - q.push(ENC(DEC_D(tmp), item.first, 0)); - } - - ofstream outfile; - outfile.open("BAI2.OUT"); - outfile << DEC_D(tmp) << endl; - outfile.close(); - - return 0; -} |