QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#874717 | #9345. Artful Paintings | SkyWave | TL | 0ms | 3712kb | C++14 | 2.1kb | 2025-01-28 14:24:15 | 2025-01-28 14:24:16 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
void solve() {
constexpr int N = 3000, M = 3000;
static int edge[M + M + 1 + N + N + 1 + 1][3], tail[N + 1];
int n, m1, m2;
cin >> n >> m1 >> m2;
if (n == 3) {
cout << "1\n";
return ;
}
memset(tail, 0, sizeof(int) * (n + 1));
int m = 0;
auto addEdge = [&](int u, int v, int w) {
edge[++m][0] = v;
edge[m][1] = w;
edge[m][2] = tail[u];
tail[u] = m;
};
for (int i = 1; i <= m1; ++i) {
int l, r, k;
cin >> l >> r >> k;
addEdge(r, l - 1, k);
}
for (int i = 1; i <= m2; ++i) {
int l, r, k;
cin >> l >> r >> k;
addEdge(l - 1, r, -k);
}
for (int i = 1; i <= n; ++i) {
addEdge(i, i - 1, 0);
addEdge(i - 1, i, 1);
}
auto check = [&](int mid) {
for (int i = m1 + 1; i <= m1 + m2; ++i) {
edge[i][1] += mid;
}
int hero = tail[0];
addEdge(0, n, mid);
queue<int> que;
que.push(0);
static bitset<N + 1> inq;
inq.reset();
inq[0] = true;
static int dis[N + 1];
memset(dis + 1, 63, sizeof(int) * n);
static int cnt[N + 1];
memset(cnt, 0, sizeof(int) * (n + 1));
cnt[0] = 1;
bool res = true;
while (!que.empty()) {
int u = que.front(); que.pop();
cout << u << '\n';
inq[u] = false;
for (int i = tail[u]; i; i = edge[i][2]) {
int v = edge[i][0], w = edge[i][1];
// cout << "!!! " << u << ' ' << v << ' ' << w << '\n';
if (dis[u] + w < dis[v]) {
dis[v] = dis[u] + w;
if (!inq[v]) {
if (++cnt[v] == n) {
res = false;
break;
}
que.push(v);
inq[v] = true;
}
}
}
}
--m;
tail[0] = hero;
for (int i = m1 + 1; i <= m1 + m2; ++i) {
edge[i][1] -= mid;
}
return res;
};
check(0);
return ;
int l = 0, r = n;
while (l <= r) {
int mid = (l + r) >> 1;
if (check(mid)) {
r = mid - 1;
} else {
l = mid + 1;
}
}
cout << l << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
/*
1
3 1 1
1 2 1
2 2 1
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3712kb
input:
1 3 1 1 1 2 1 2 2 1
output:
1
result:
ok single line: '1'
Test #2:
score: -100
Time Limit Exceeded
input:
1 1000 500 500 479 860 170 73 939 25 363 772 30 185 584 89 326 482 10 784 949 23 384 740 114 233 693 45 167 724 211 217 436 95 46 701 153 138 585 67 321 388 11 114 890 194 407 854 74 438 845 117 9 718 259 393 576 35 182 707 257 451 766 136 150 382 31 468 785 40 202 490 46 326 815 59 272 441 77 123 8...
output:
0 1000 1 679 999 2 323 680 678 888 998 545 3 324 322 623 24 681 677 332 889 887 997 546 544 956 347 4 860 325 321 624 622 963 25 23 682 676 984 333 331 890 979 604 709 886 145 996 951 547 543 166 226 957 955 172 869 348 346 584 195 5 91 861 859 105 478 326 320 372 625 33 621 374 964 962 830 26 952 2...