結果
| 問題 |
No.1301 Strange Graph Shortest Path
|
| コンテスト | |
| ユーザー |
otogawa
|
| 提出日時 | 2025-04-22 09:09:04 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,482 bytes |
| コンパイル時間 | 2,815 ms |
| コンパイル使用メモリ | 207,284 KB |
| 実行使用メモリ | 17,500 KB |
| 最終ジャッジ日時 | 2025-04-22 09:09:17 |
| 合計ジャッジ時間 | 11,381 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 28 WA * 5 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define int ll
#define fast_io cin.tie(0)->sync_with_stdio(0);
#define endl '\n'
typedef long long ll;
int32_t main() {
fast_io;
int n, m; cin >> n >> m;
using T = array<int, 4>;
using E = pair<int, int>;
vector<T> edges;
vector<vector<E>> g(n);
for (int i = 0; i < m; i++) {
int u, v, w, t; cin >> u >> v >> w >> t;
edges.push_back({u - 1, v - 1, w, t});
g[u - 1].push_back({v - 1, i});
g[v - 1].push_back({u - 1, i});
}
vector<int> state(m);
vector<int> dist(n);
vector<pair<int, int>> par(n);
const int INF = 1e18;
auto dijkstra = [&] (int s) {
fill(dist.begin(), dist.end(), INF);
dist[s] = 0;
priority_queue<E, vector<E>, greater<E>> pq;
pq.emplace(dist[s], s);
while (pq.size()) {
auto [d, u] = pq.top();
pq.pop();
if (d > dist[u]) continue;
for (auto [v, i] : g[u]) {
int w = edges[i][2 + state[i]];
if (dist[v] > dist[u] + w) {
dist[v] = dist[u] + w;
par[v] = {u, i};
pq.emplace(dist[v], v);
}
}
}
};
dijkstra(0);
int ans = dist[n - 1];
int at = n - 1;
while (at != 0) {
state[par[at].second]++;
at = par[at].first;
}
dijkstra(0);
ans += dist[n - 1];
cout << ans << endl;
}
otogawa