首页 > 其他分享 >P1251 餐巾计划问题

P1251 餐巾计划问题

时间:2023-01-06 14:23:04浏览次数:58  
标签:pre P1251 int flow 餐巾 tot 计划 now dis

P1251 餐巾计划问题

关键

感觉是一个很好的题目,但是理解的还不是很深刻,很像一种减法
1.毛巾不会多买,因为是直接连向了y点,所以数量是保证的
2.把直接买的和向下传递进行分开,从而形成了一种减法,但是两者又互不干扰,也就是数量上是一定满足条件的

代码

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=1e5+5,M=1e6+5,inf=1e9;
 
int h[N],ne[M],e[M],w[M],c[M],tot=1;
void add(int from,int to,int wi,int ci) {
    e[++tot]=to;  w[tot]=wi;  c[tot]=ci;  ne[tot]=h[from];  h[from]=tot;
    e[++tot]=from;w[tot]=0;   c[tot]=-ci; ne[tot]=h[to];    h[to]=tot;
}
 
int S=N-2,T=N-1;
bool st[N];
int dis[N],flow[N],pre[N];
bool spfa() {
    memset(dis,0x3f,sizeof(dis));
    memset(flow,0,sizeof(flow));
    queue<int>q;q.push(S);
    flow[S]=inf;dis[S]=0;st[S]=1;
    while(!q.empty()) {
        int now=q.front();
        q.pop();st[now]=0;
        for(int i=h[now];i;i=ne[i]) {
            int to=e[i];
            if(w[i]>0&&dis[to]>dis[now]+c[i]) {
                dis[to]=dis[now]+c[i];
                pre[to]=i;
                flow[to]=min(flow[now],w[i]);
                if(st[to]==0)st[to]=1,q.push(to);
            }
        }
    }
    return flow[T];
}
 
ll EK() {
    ll ans=0;
    while(spfa()) {
        ll tmp=flow[T];
        ans+=1ll*tmp*dis[T];
        for(int i=T;i!=S;i=e[pre[i]^1]) {
            w[pre[i]]-=tmp;
            w[pre[i]^1]+=tmp;
        }
    }
    return ans;
}

int a,b1,b2,c1,c2;
int d[M];
//很神奇的一个题目

int main() {
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int n;cin>>n;
    for(int i=1;i<=n;i++)cin>>d[i];
    cin>>a>>b1>>b2>>c1>>c2;
    for(int i=1;i<=n;i++) {
        add(S,i<<1|1,inf,a);
        add(S,i<<1,d[i],0);
        add(i<<1|1,T,d[i],0);
        if(i+1<=n)add(i<<1,(i+1)<<1,inf,0);     //留到下一天在洗
        if(i+b1<=n)add(i<<1,(i+b1)<<1|1,inf,b2);//在这里可以洗多少
        if(i+c1<=n)add(i<<1,(i+c1)<<1|1,inf,c2);
    }
    //如果他被洗掉了,那就直接送走了
    cout<<EK()<<endl;
    return 0;
}

标签:pre,P1251,int,flow,餐巾,tot,计划,now,dis
From: https://www.cnblogs.com/basicecho/p/17030346.html

相关文章

  • 2023个人年度工作计划怎么写?可在电脑上写下来并提醒自己
    新年新计划,如果你想要在工作中不断取得进步,那么制定个人年度工作计划是必不可少的。我们只有提前制定好年度工作计划,然后将这些计划拆解到每个月、每周、每天逐步去完成,最......
  • FreeSWITCH学习笔记6(6.1.7-) - 拨号计划
    目录:   6.1.7工作机制深入剖析 举例见6.1.7。6.1.8内联执行  6.1.9实例解析实例见6.1.9。 6.2inlineDialplan(内联拨号计划)    6.3......
  • FreeSWITCH学习笔记6(——6.1.6) - 拨号计划
    目录:          6.1.6动作与反动作 6.1XMlDialplan6.1.1配置文件的结构     6.1.2默认的配置文件简介  6.1.3正则表达式6.1.4......
  • 万万没想到,除了香农计划,Python3.11竟还有这么多性能提升!
    众所周知,Python3.11版本带来了较大的性能提升,但是,它具体在哪些方面上得到了优化呢?除了著名的“香农计划”外,它还包含哪些与性能相关的优化呢?本文将带你一探究竟!作者:Beshr......
  • 4.Oracle的执行计划
    1.Oracle的执行计划  执行计划:描述一条语句在oracle中的执行过程或访问路径的描述,即就是对一个查询任务,做出一个怎样去完成任务的详细方法如果要分析某条sql的性......
  • 定时JOB计划
    定时计划 (1)每分钟执行Interval=>TRUNC(sysdate,'mi')+1/(24*60)–或sysdate+1/1440每五分钟执行TRUNC(SYSDATE,'mi')+5/(24*60) (2)每小时执行TRUNC(S......
  • 牛客寒假算法基础集训营4-J-Applese 的减肥计划
    链接:​​https://ac.nowcoder.com/acm/contest/330/J​​牛客网 已知Applese两只手分别产生的力的大小,以及它们之间的夹角,试求两力合力的大小。输入描述:仅一行三个整......
  • 用于年度复盘与计划的数据分析报告怎么写
    ![](​​​https://api2.mubu.com/v3/document_image/1a2a06d4-f84a-4a95-aa0e-81e500640959-1177969.jpg​​​)又到了年底年初做总结的日子,每个人&部门都要向老板做汇报,其......
  • 用于年度复盘与计划的数据分析报告怎么写
    又到了年底年初做总结的日子,每个人&部门都要向老板做汇报,其中最重要的形式就是写年度数据报告。首先我们要清楚写这个东西的目的是什么?大概有3个:第1,分析问题,帮助整个......
  • 2023年回顾与计划
    时光转瞬即逝,2022年即将过去,又到了年底的时刻,也该好好的总结自己一年来的点滴以及对新的一年的展望了。每步走过的路都是你成长的见证,且行且珍惜!2022年总结记得在2022年初,我......