P3826 [NOI2017] 蔬菜 题解
Description
有
特别地,若
注意,当
同时,每天销售的蔬菜,总量也是有限的,最多不能超过
现在,小 N 有
Solution
首先考虑怎么建出费用流模型。
注意到每天会有蔬菜消失,很难处理,所以考虑时空倒流,这样就变为每天会有一些蔬菜添加进去。
建立源点
但是这里没有考虑每种蔬菜第一次买的
考虑如何模拟这个费用流。
这里用每次加点的方式跑。观察上图会发现只有 II 和 III 种增广路是有效的,而这两种都不会退流,所以
现在只需要求出
时间复杂度:
Code
#include <bits/stdc++.h> // #define int int64_t using i64 = int64_t; const int kMaxN = 1e5 + 5, kMaxT = kMaxN * 10; int n, m, k, t; int a[kMaxN], s[kMaxN], c[kMaxN], x[kMaxN], lst[kMaxN], now[kMaxN]; i64 veg[kMaxT], ans[kMaxT]; std::vector<std::tuple<int, int, int>> vec[kMaxN]; int gettime(int c, int x) { if (!x) return 1e5; else return (c - 1) / x + 1; } void solve() { std::priority_queue<std::tuple<int, int, int>> q; for (int c = 1e5; c; --c) { for (auto [x, w, cnt] : vec[c]) q.emplace(w, x, cnt), now[x] += cnt; std::vector<int> vv; for (int cc = 1; cc <= m && !q.empty(); ++cc) { auto [w, i, cnt] = q.top(); q.pop(); veg[++t] = w, --now[i], --cnt; if (cnt) q.emplace(w, i, cnt); if (!now[i] && x[i]) { if (lst[i] > c) q.emplace(a[i], i, now[i] += x[i] * (lst[i] - c)), lst[i] = c; else vv.emplace_back(i); } } for (auto i : vv) q.emplace(a[i], i, now[i] += x[i]), lst[i] = c - 1; } std::sort(veg + 1, veg + 1 + t, std::greater<>()); for (int i = 1; i <= t; ++i) ans[i] = ans[i - 1] + veg[i]; } void dickdreamer() { std::cin >> n >> m >> k; for (int i = 1; i <= n; ++i) { std::cin >> a[i] >> s[i] >> c[i] >> x[i]; vec[gettime(c[i], x[i])].emplace_back(0, a[i] + s[i], 1); --c[i]; if (c[i]) { int t = gettime(c[i], x[i]); lst[i] = t; vec[t].emplace_back(i, a[i], c[i] - x[i] * (t - 1)); } } solve(); for (int i = 1; i <= k; ++i) { int p; std::cin >> p; std::cout << ans[std::min(p * m, t)] << '\n'; } } int32_t main() { #ifdef ORZXKR freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif std::ios::sync_with_stdio(0), std::cin.tie(0), std::cout.tie(0); int T = 1; // std::cin >> T; while (T--) dickdreamer(); // std::cerr << 1.0 * clock() / CLOCKS_PER_SEC << "s\n"; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步