結果
| 問題 |
No.614 壊れたキャンパス
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-12-15 15:56:41 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,719 bytes |
| コンパイル時間 | 1,607 ms |
| コンパイル使用メモリ | 177,300 KB |
| 実行使用メモリ | 39,388 KB |
| 最終ジャッジ日時 | 2024-12-14 15:56:56 |
| 合計ジャッジ時間 | 9,149 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 3 WA * 15 RE * 2 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
typedef long long ll;
map<pii, ll> dp;
vector<pii> G[200010];
int main(void) {
int n, m, k, s, t;
cin >> n >> m >> k >> s >> t;
for (int i = 0; i < m; i++) {
int a, b, c;
cin >> a >> b >> c;
G[a].push_back(pii(b, c));
}
for (int i = 1; i <= n; i++) {
sort(G[i].begin(), G[i].end());
}
for (int i = n; i >= 1; i--) {
if (i == n) {
for (int j = 0; j < G[i - 1].size(); j++) {
dp[pii(i, G[i - 1][j].second)] = abs(G[i - 1][j].second - t);
}
} else {
for (int j = 0; j < G[i].size(); j++) {
dp[pii(i, G[i][j].first)] = dp[pii(i + 1, G[i][j].second)];
}
if (i == 1) continue;
ll mind = 1LL << 60;
int up = 0, dw = G[i].size() - 1;
for (int j = 0; j < G[i - 1].size(); j++) {
while (up < G[i].size() - 1 && G[i][up].first <= G[i - 1][j].second) {
mind = min(mind, dp[pii(i, G[i][up].first)] + G[i][up].first - G[i - 1][j].second);
up++;
}
dp[pii(i, G[i - 1][j].second)] = min(dp[pii(i, G[i - 1][j].second)], mind);
}
mind = 1LL << 60;
for (int j = G[i - 1].size() - 1; j >= 0; j--) {
while (dw >= 0 && G[i][dw].first >= G[i - 1][j].second) {
mind = min(mind, dp[pii(i, G[i][dw].first)] + G[i - 1][j].second - G[i][dw].first);
dw--;
}
dp[pii(i, G[i - 1][j].second)] = min(dp[pii(i, G[i - 1][j].second)], mind);
}
}
}
ll ans = 1LL << 60;
for (int i = 0; i < G[1].size(); i++) {
ans = min(ans, dp[pii(1, G[1][i].first)] + abs(G[1][i].first - s));
}
cout << (ans == 1LL << 60 ? -1 : ans) << endl;
return 0;
}