P3545 [POI2012]HUR-Warehouse Store

https://www.luogu.com.cn/problem/P3545

模拟费用流入门题

能满足就满足

不能满足考虑反悔,替换掉前面一个\(b_j\)最大的,如果\(b_j<b_i\)那就没有必要替换

code:

#include<bits/stdc++.h>
#define N 250050
#define ll long long
#define pii pair<int, int>
#define fi first
#define se second
using namespace std;
struct Q {
    int t, s;
} a[N];
int n;
priority_queue<pii > q;
int main() {
    scanf("%d", &n);
    for(int i = 1; i <= n; i ++) scanf("%d", &a[i].t);
    for(int i = 1; i <= n; i ++) scanf("%d", &a[i].s);
    int ans = 0;
    ll T = 0;
    for(int i = 1; i <= n; i ++) {
        T += a[i].t;
        if(T >= a[i].s) {
            T -= a[i].s;
            q.push(make_pair(a[i].s, i));
            ans ++;
        } else {
            if(q.size() && a[i].s < q.top().fi) {
                T += q.top().fi; q.pop();
                T -= a[i].s;
                q.push(make_pair(a[i].s, i));
            }
        }
    }
    printf("%d\n", ans);
    while(q.size()) printf("%d ", q.top().se), q.pop();
    return 0;
}
posted @ 2021-12-16 22:06  lahlah  阅读(51)  评论(0编辑  收藏  举报