QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#874749 | #9345. Artful Paintings | SkyWave | TL | 0ms | 0kb | C++14 | 2.1kb | 2025-01-28 14:56:26 | 2025-01-28 14:56:27 |
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 + 1][3], tail[N + 1];
int n, m1, m2;
cin >> n >> m1 >> m2;
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);
addEdge(n, 0, 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);
dis[0] = 0;
static int cnt[N + 1];
memset(cnt, 0, sizeof(int) * (n + 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 + 1) {
res = false;
break;
}
que.push(v);
inq[v] = true;
}
}
}
}
m -= 2;
tail[0] = hero;
for (int i = m1 + 1; i <= m1 + m2; ++i) {
edge[i][1] -= mid;
}
return res;
};
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: 0
Time Limit Exceeded
input:
1 3 1 1 1 2 1 2 2 1