QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#96646 | #5036. 卑鄙的下毒人 | Watware | Compile Error | / | / | C++14 | 2.2kb | 2023-04-14 23:18:52 | 2023-04-14 23:18:57 |
Judging History
你现在查看的是最新测评结果
- [2023-08-10 23:21:45]
- System Update: QOJ starts to keep a history of the judgings of all the submissions.
- [2023-04-14 23:18:57]
- 评测
- 测评结果:Compile Error
- 用时:0ms
- 内存:0kb
- [2023-04-14 23:18:52]
- 提交
answer
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N = 301000, M = 100100;
int head[N], cur[N], to[M], nxt[M], n, m, s, t, tot = 2, u, v, q[N * 10000];
i64 val[M], w[M], a, b, dis[M];
bool in[N], vis[N];
inline void add(int u, int v, i64 a, i64 b) {
// printf("add %d -> %d : cap = %d, cost = %d\n", u, v, a, b);
to[tot] = v, nxt[tot] = head[u], val[tot] = a, w[tot] = b, head[u] = tot++;
to[tot] = u, nxt[tot] = head[v], val[tot] = 0, w[tot] = -b, head[v] = tot++;
}
inline bool spfa() {
memset(dis, 0x3f, sizeof(dis)), memcpy(cur, head, sizeof(head));
int l = 0, r = -1;
dis[s] = 0, in[s] = 1, q[++r] = s;
while (l <= r)
for (int o = q[l++], i = ((in[o] = 0), head[o]); i; i = nxt[i])
if (val[i] && dis[to[i]] > dis[o] + w[i]) {
dis[to[i]] = dis[o] + w[i];
if (!in[to[i]]) in[to[i]] = 1, q[++r] = to[i];
}
// printf("spfa result :\n");
// for (int i = 1; i <= n + 2; i++) printf("%d : %lld\n", i, dis[i]);
return dis[t] != dis[0];
}
i64 cost, flow;
i64 dfs(int n, i64 fl) {
i64 lf = fl;
vis[n] = 1;
if (n == t) return vis[n] = 0, fl;
for (int &i = cur[n]; i; i = nxt[i])
if (!vis[to[i]] && dis[to[i]] == dis[n] + w[i] && val[i]) {
i64 t = dfs(to[i], min(val[i], lf));
val[i] -= t, val[i ^ 1] += t, cost += t * w[i], lf -= t;
if (!lf) return vis[n] = 0, fl;
}
vis[n] = 0;
return fl - lf;
}
void dinic() {
while (spfa()) flow += dfs(s, LONG_LONG_MAX); //printf("%d\n", flow);
}
int k;
int main() {
// scanf("%d%d%d%d", &n, &m, &s, &t);
// for (int i = 1; i <= m; i++) scanf("%d%d%lld%lld", &u, &v, &a, &b), add(u, v, a, b);
// dinic();
// printf("%lld %lld\n", flow, cost);
scanf("%d%d%d", &n, &m, &k);
s = n + 1, t = n + 2;
add(s, 1, 100, 0), add(n, t, k, 0);
for (int i = 2; i <= n; i++) add(i - 1, i, 100, 0);
for (int i = 1; i <= m; i++) {
int l, r, a;
scanf("%d%d%d", &l, &r, &a);
l--, l = l ? l : s;
// printf("!!! %d %d\n", l, r);
add(l, r, 1, -a);
}
dinic();
printf("%lld\n", -cost);
// printf("%lld\n", flow);
return 0;
}
详细
answer.code:5:68: warning: integer overflow in expression of type ‘int’ results in ‘-1284967296’ [-Woverflow] 5 | int head[N], cur[N], to[M], nxt[M], n, m, s, t, tot = 2, u, v, q[N * 10000]; | ~~^~~~~~~ answer.code:5:68: error: size ‘-1284967296’ of array ‘q’ is negative answer.code: In function ‘int main()’: answer.code:50:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 50 | scanf("%d%d%d", &n, &m, &k); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~ answer.code:56:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 56 | scanf("%d%d%d", &l, &r, &a); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~