# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
126551 | ainta | Arranging Tickets (JOI17_arranging_tickets) | C++17 | 1222 ms | 16952 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#define SZ 262144
#define pii pair<int,int>
using namespace std;
int n, m;
vector<pii>G[201000];
long long S[201000], Z[201000], H[201000], T[201000];
int pv;
bool OK(long long K) {
int i;
long long s = 0;
for (i = 0; i < n; i++) {
H[i] = min(H[i], K);
T[i] = 0;
}
H[pv] = 0;
priority_queue<pii>PQ;
for (i = 1; i <= pv; i++) {
for (auto &t : G[i]) {
if(t.first > pv)PQ.push(t);
}
s += H[i - 1] - H[i];
while (s) {
if (PQ.empty())return false;
pii tp = PQ.top();
PQ.pop();
if (tp.second >= s) {
tp.second -= s;
T[tp.first] -= s;
PQ.push(tp);
s = 0;
}
else {
T[tp.first] -= tp.second;
s -= tp.second;
}
}
}
for (i = 1; i < n; i++) {
T[i] += T[i - 1];
if (T[i] + H[i] < 0)return false;
}
return true;
}
bool Pos(long long M) {
long long i, j;
long long bb = Z[pv] - M, ee = M / 2;
for (i = bb; i <= bb + 1; i++) {
for (j = 0; j < n; j++) {
H[j] = (i + M - Z[j]) / 2;
}
if (H[0] < i)continue;
if (OK(i))return true;
}
return false;
}
int main() {
int i;
//freopen("input.txt","r",stdin);
scanf("%d%d", &n, &m);
for (i = 1; i <= m; i++) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (a > b)swap(a, b);
G[a].push_back({ b,c });
S[a] += c;
S[b] -= c;
}
long long Mx = -1;
pv = -1;
for (i = 1; i < n; i++) {
S[i] += S[i - 1];
if (Mx < S[i]) {
Mx = S[i];
pv = i;
}
}
for (i = 1; i <= pv; i++)Z[i] = max(Z[i - 1], S[i]);
for (i = n - 1; i >= pv; i--)Z[i] = max(Z[i + 1], S[i]);
long long b = 0, e = Mx - 1, mid, r = Mx;
while (b <= e) {
mid = (b + e) >> 1;
if (Pos(mid)) {
r = mid;
e = mid - 1;
}
else b = mid + 1;
}
printf("%lld\n", r);
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |