結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
knk
|
| 提出日時 | 2017-09-24 20:45:50 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 5,000 ms |
| コード長 | 1,743 bytes |
| コンパイル時間 | 1,298 ms |
| コンパイル使用メモリ | 99,284 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-20 16:33:47 |
| 合計ジャッジ時間 | 2,271 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 40 |
ソースコード
#include <iostream>
#include <iomanip>
#include <vector>
#include <tuple>
#include <queue>
typedef long long ll;
// time, city, cost
typedef std::tuple< int, int, int, std::vector< bool > > node;
int main(void)
{
std::cin.tie(0);
std::ios::sync_with_stdio(false);
std::cout << std::fixed << std::setprecision(13);
int n, c, v;
std::cin >> n >> c >> v;
std::vector< std::vector< std::tuple< int, int, int > > > path(n);
int s[v], t[v], y[v], m[v];
for (int i = 0; i < v; ++i) std::cin >> s[i];
for (int i = 0; i < v; ++i) std::cin >> t[i];
for (int i = 0; i < v; ++i) std::cin >> y[i];
for (int i = 0; i < v; ++i) std::cin >> m[i];
for (int i = 0; i < v; ++i) {
s[i]--; t[i]--;
path[s[i]].push_back(std::make_tuple(t[i], y[i], m[i]));
}
std::vector< bool > visited(n);
std::fill(visited.begin(), visited.end(), false);
visited[0] = true;
node root = make_tuple(0, 0, 0, visited);
std::priority_queue< node, std::vector< node >, std::greater< node > > q;
q.push(root);
while (!q.empty()) {
auto prev = q.top();
q.pop();
int ptime = std::get<0>(prev), pcity = std::get<1>(prev), pcost = std::get<2>(prev);
if (pcity == n-1) {
std::cout << ptime << std::endl;
return 0;
}
std::vector< bool > pvisited = std::get<3>(prev);
for (auto next : path[pcity]) {
int path_to = std::get<0>(next), path_cost = std::get<1>(next), path_time = std::get<2>(next);
if (pvisited[path_to] || pcost + path_cost > c) continue;
pvisited[path_to] = true;
node next_node = make_tuple(ptime + path_time, path_to, pcost + path_cost, pvisited);
q.push(next_node);
pvisited[path_to] = false;
}
}
std::cout << -1 << std::endl;
return 0;
}
knk