結果
| 問題 | No.3712 Urban Train |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-08-10 09:17:47 |
| 言語 | C++23 (gcc 15.3.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 288 ms / 2,000 ms |
| + 815µs | |
| コード長 | 2,031 bytes |
| 記録 | |
| コンパイル時間 | 2,196 ms |
| コンパイル使用メモリ | 342,352 KB |
| 実行使用メモリ | 20,404 KB |
| 最終ジャッジ日時 | 2026-09-11 20:55:13 |
| 合計ジャッジ時間 | 5,756 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 39 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef std::pair<long long, long long> P;
typedef std::priority_queue<P, std::vector<P>, std::greater<P>> PQ;
template<typename T, typename U>
bool chmax(T& a, U b) {
if (a < b) {
a = b;
return true;
} else {
return false;
}
}
template<typename T, typename U>
bool chmin(T& a, U b) {
if (a > b) {
a = b;
return true;
} else {
return false;
}
}
int main()
{
ll n, m;
cin >> n >> m;
if (n <= 1 || n > 100000) return 1;
if (m < 1 || m > 200000) return 1;
vector<vector<P>> path(n);
for (int i = 0; i < m; ++i) {
ll u, v, w;
cin >> u >> v >> w;
if (u == v) return 1;
if (1 > min(u, v) || n < max(u, v)) return 1;
if (w < 1 || 1000000000 < w) return 1;
--u, --v;
path[u].push_back({v, w});
path[v].push_back({u, w});
}
vector<ll> a(n), b(n), c(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
if (a[i] < 1 || a[i] > 1000000000) return 1;
}
for (int i = 0; i < n; ++i) {
cin >> b[i];
if (b[i] <= 1 || b[i] > 100) return 1;
}
for (int i = 0; i < n; ++i) {
cin >> c[i];
if (c[i] < 1 || c[i] > 1000000000) return 1;
}
vector<ll> dist(n, 1e18);
dist[0] = 1;
PQ pq;
pq.push({1, 0});
while (!pq.empty()) {
ll u = pq.top().second;
ll ud = pq.top().first;
pq.pop();
if (ud > dist[u]) continue;
for (auto [v, w] : path[u]) {
if ((((ud + (a[u] - (ud % a[u])) % a[u])) / a[u]) % b[u]) {
if (chmin(dist[v], ud + (a[u] - (ud % a[u])) % a[u] + w)) {
pq.push({dist[v], v});
}
} else {
if (chmin(dist[v], ud + (a[u] - (ud % a[u])) % a[u] + w + min(c[u], a[u]))) {
pq.push({dist[v], v});
}
}
}
}
cout << dist[n - 1] << endl;
}