結果
| 問題 |
No.2764 Warp Drive Spacecraft
|
| コンテスト | |
| ユーザー |
aplysiaSheep
|
| 提出日時 | 2024-05-19 15:17:27 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,621 bytes |
| コンパイル時間 | 1,342 ms |
| コンパイル使用メモリ | 102,456 KB |
| 実行使用メモリ | 68,924 KB |
| 最終ジャッジ日時 | 2024-12-20 17:08:24 |
| 合計ジャッジ時間 | 87,179 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 WA * 1 |
| other | AC * 8 WA * 7 TLE * 20 |
ソースコード
#include <iostream>
#include <vector>
#include <queue>
#include <limits>
using namespace std;
struct Edge {
int to;
long long cost;
};
const long long INF = numeric_limits<long long>::max();
int main() {
int N, M;
cin >> N >> M;
vector<long long> W(N + 1);
for (int i = 1; i <= N; ++i) {
cin >> W[i];
}
vector<vector<Edge>> graph(N + 1);
for (int i = 0; i < M; ++i) {
int U, V;
long long T;
cin >> U >> V >> T;
graph[U].push_back({V, T});
graph[V].push_back({U, T});
}
// ダイクストラ法の準備
priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<pair<long long, int>>> pq;
vector<long long> dist(N + 1, INF);
dist[1] = 0;
pq.push({0, 1});
while (!pq.empty()) {
auto [current_dist, u] = pq.top();
pq.pop();
if (current_dist > dist[u]) continue;
// 通常の航路での更新
for (const auto& edge : graph[u]) {
int v = edge.to;
long long cost = edge.cost;
if (dist[u] + cost < dist[v]) {
dist[v] = dist[u] + cost;
pq.push({dist[v], v});
}
}
// ワープによる更新
for (int v = 1; v <= N; ++v) {
if (u != v) {
long long warp_cost = W[u] * W[v];
if (dist[u] + warp_cost < dist[v]) {
dist[v] = dist[u] + warp_cost;
pq.push({dist[v], v});
}
}
}
}
cout << dist[N] << endl;
return 0;
}
aplysiaSheep