結果
| 問題 | No.2321 Continuous Flip |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-03-02 16:14:29 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 427 ms / 2,000 ms |
| コード長 | 1,116 bytes |
| 記録 | |
| コンパイル時間 | 3,300 ms |
| コンパイル使用メモリ | 349,548 KB |
| 実行使用メモリ | 46,476 KB |
| 最終ジャッジ日時 | 2026-03-02 16:17:31 |
| 合計ジャッジ時間 | 16,412 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 30 |
ソースコード
#include <bits/stdc++.h>
#define rep(i, a, b) for(int i = (a); i <= (b); i ++)
using std::cin, std::cout, std::cerr;
using ll = long long;
void Solve() {
int n, m; ll c; cin >> n >> m >> c;
std::vector<std::vector<std::pair<int, ll>>> e(n + 1);
ll sum = 0;
rep(i, 1, n) {
ll x; cin >> x;
sum += x;
e[i - 1].push_back({i, x});
e[i].push_back({i - 1, x});
}
rep(i, 1, m) {
int l, r; cin >> l >> r;
e[l - 1].push_back({r, c});
e[r].push_back({l - 1, c});
}
std::vector<ll> f(n + 1, 1e18L);
f[0] = 0;
std::set<std::pair<ll, int>> set;
rep(i, 0, n) set.insert({f[i], i});
while(!set.empty()) {
auto [_, x] = *set.begin();
set.erase(set.begin());
for(auto [i, w] : e[x]) {
if(f[x] + w < f[i]) {
set.erase({f[i], i});
f[i] = f[x] + w;
set.insert({f[i], i});
}
}
}
cout << sum - f[n] << '\n';
}
int main() {
std::ios::sync_with_stdio(false);
int T = 1;
while(T --) {
Solve();
}
}