結果
問題 | No.2477 Drifting |
ユーザー |
![]() |
提出日時 | 2023-09-06 15:28:36 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,336 bytes |
コンパイル時間 | 1,780 ms |
コンパイル使用メモリ | 104,268 KB |
最終ジャッジ日時 | 2025-02-16 19:03:43 |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 WA * 1 |
other | AC * 13 WA * 1 |
ソースコード
#include <algorithm>#include <array>#include <iostream>#include <set>#include <vector>using namespace std;using i64 = long long;using A = array<int, 3>;A make(int a, int b, int c) {A res;res[0] = a;res[1] = b;res[2] = c;return res;}int main() {int n, m;cin >> n >> m;vector<set<pair<int, i64>>> out(n);for (int i = 0; i < m; i++) {int a, b;i64 w;cin >> a >> b >> w;a--, b--;out[a].emplace(b, w);}set<A> banned;int k;cin >> k;for (int i = 0; i < k; i++) {int a, b, c;cin >> a >> b >> c;a--, b--, c--;banned.emplace(make(a, b, c));}vector<vector<pair<i64, int>>> in(n);vector<i64> dist(n, 1e18);in[0].emplace_back(0, -1);for (int i = 0; i < n; i++) {auto& v = in[i];sort(v.begin(), v.end());vector<pair<int, int>> er;for (auto& [c, from] : v) {dist[i] = min(dist[i], c);for (auto& [to, w] : out[i]) {if (banned.count(make(from, i, to))) continue;in[to].emplace_back(c + w, i);er.emplace_back(to, w);}for (auto p : er) out[i].erase(p);er.clear();}}cout << dist[n - 1] << endl;}