首页 > 其他分享 >金牌导航-费用流

金牌导航-费用流

时间:2023-12-13 20:45:09浏览次数:21  
标签:pre 费用 ch int fl read 导航 金牌 dis

费用流

例题A题解

将每天拆成月初和月底,然后再月初买卖,月底存进仓库,按照题意进行连边即可。

例题A代码

#include<bits/stdc++.h>
using namespace std;
inline int read(){
    int x = 0, f = 1;char ch = getchar();
    while(ch < '0' || ch > '9'){if(ch == '-') f = -1;ch = getchar();}
    while(ch >= '0' && ch <= '9'){x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}
    return x * f;
}
const int maxn = 1e3 + 10, maxm = 1e5 + 10, INF = 0x3f3f3f3f;
int n, m;
int head[maxn], tot = 1;
struct edge{
    int to, nexte, cap,flow, cost;
    edge(int t = 0,int ne = 0,int ca = 0,int co = 0,int fl = 0):to(t),nexte(ne),cap(ca),cost(co),flow(fl){}
}e[maxm * 2];
void add(int u,int v,int cap,int cost){e[++tot] = edge(v,head[u],cap,cost);head[u] = tot;}
void addd(int u,int v,int cap,int cost){add(u,v,cap,cost);add(v,u,0,-cost);}

int pre[maxn], dis[maxn];
bool book[maxn];
bool SPFA(int S,int T){
    queue<int> que;
    for(int i = 1;i <= T;i++)dis[i] = INF;
    memset(book,0,sizeof(book));
    memset(pre,0,sizeof(pre));
    que.push(S);book[S] = true;dis[S] = 0;
    while(!que.empty()){
        int u = que.front();que.pop();book[u] = false;
        for(int i = head[u];i;i = e[i].nexte){
            int v = e[i].to;
            if((e[i].cap > e[i].flow) && (dis[v] > dis[u] + e[i].cost)){
                pre[v] = i;dis[v] = dis[u] + e[i].cost;
                if(!book[v]){que.push(v);book[v] = true;}
            }
        }
    }
    return pre[T] != 0;
}

pair<int,int> MCMF(int S,int T){
    int mincost = 0, maxflow = 0;
    while(SPFA(S,T)){
        int fl = INF;
        for(int i = pre[T];i;i = pre[e[i ^ 1].to])
            fl = min(fl,e[i].cap - e[i].flow);
            
        mincost += fl * dis[T];maxflow += fl;
        for(int i = pre[T];i;i = pre[e[i ^ 1].to]){
            e[i].flow += fl;e[i ^ 1].flow -= fl;
        }
    }
    return make_pair(maxflow,mincost);
}
int U[maxn], d[maxn];
signed main(){
    n = read(); m = read();int cap = read();
    int S = n * 2 + 1, T = n * 2 + 2;
    for(int i = 1;i <= n;i++)U[i] = read();
    for(int i = 1;i <= n;i++)d[i] = read();
    for(int i = 1;i <= n;i++){
        addd(S,i * 2,INF,d[i]);
        addd(i * 2 - 1,i * 2,INF,m);
        addd(i * 2,T,U[i],0);
        addd(i * 2,i * 2 + 1,cap,0);
    }
    printf("%d\n",MCMF(S,T).second);
    return 0;
}

标签:pre,费用,ch,int,fl,read,导航,金牌,dis
From: https://www.cnblogs.com/Call-me-Eric/p/17899877.html

相关文章

  • 搭建自定义导航网站
    免费版地址https://www.iotheme.cn/store/webstack.html付费版购买地址https://www.iotheme.cn/store/onenav.htmlWebstack项目地址:https://github.com/HCLonely/hexo-theme-webstack其他主题推荐TwoNav主题:https://github.com/tznb1/TwoNav一、安装宝塔面板宝塔官网:https......
  • 金牌导航-网络流模型及应用
    网络流模型及应用例题A题解直接对于每个限制连边,然后跑最小割,最小割等于最大流。例题A代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;inlineintread(){intx=0,f=1;charch=getchar();while(ch<'0'||ch>'9'){if(ch=='......
  • 如何实现抽屉式导航(ArkUI)
    场景介绍由于用户所需功能逐渐增多,传统的标签式导航在个别场景已经无法满足用户需求。当导航栏的空间放不下过多页签时,可以采用抽屉式导航,本例将为大家介绍如何通过SideBarContainer组件实现抽屉式导航。效果呈现本例最终实现效果如下:运行环境IDE:DevEcoStudio3.1Beta1SD......
  • 界面控件DevExpress WPF导航组件,助力升级应用程序用户体验!(下)
    DevExpressWPF的SideNavigation(侧边导航)、TreeView、导航面板组件能帮助开发者在WPF项目中添加Windows样式的资源管理器栏或OutlookNavBar(导航栏),DevExpressWPFNavBar和Accordion控件包含了许多开发人员友好的功能,专门设计用于帮助用户构建极佳的应用功能。在上文中(点击这里回......
  • 微信小程序自定义顶部导航栏并适配不同机型
    前言在小程序中,顶部导航栏是一个非常重要的组件,它不仅可以方便用户进行页面切换,还可以提高用户体验。默认情况下,小程序的顶部导航栏是由系统自动生成的,我们只能修改一些基本的样式,如背景色、文字颜色等。但是,如果想要实现更加复杂的样式,如自定义图标、自定义背景等,而且在不同的手......
  • 金牌导航-网络流初探
    网络流初探例题B题解从源点向每个猪圈连边,每个人向汇点连边。然后对于每个人所能打开的猪圈,如果在此之前没有被其他人连过,就让这个猪圈连向这个人,否则让这个人连向之前那个人。例题B代码#include<bits/stdc++.h>usingnamespacestd;inlineintread(){intx=0,f=......
  • 最小费用组最大流——EK算法
    时间复杂度O(nm^2),理论上限//n,m,s,t,分别代表该网络的点数n,网络的边数m,源点编号s,汇点编号t。constintN=5010,M=100010,INF=1e8;intn,m,S,T;structedge{intv,c,w,ne;}e[M];inth[N],idx=1;//从2,3开始配对intd[N],mf[N],pre[N],vis[N];intflow,cost;voidadd(inta,......
  • 关于键盘导航顺序和 tabindex 属性的关联关系
    "tabindex"属性是HTML元素中的一个属性,用于定义元素在通过键盘导航时的顺序。该属性接受一个整数值,通常为正整数,用于指定元素的tab键顺序。但是,当"tabindex"属性的值为-1时,它有特殊的含义。当"tabindex"的值为-1时,它表示该元素虽然可以通过JavaScript聚焦,但在通过按下Tab键进行导......
  • 金牌导航-二分图匹配
    金牌导航-二分图匹配例题A题解将行和列相匹配,跑最小割即可。例题A代码#include<bits/stdc++.h>usingnamespacestd;inlineintread(){intx=0,f=1;charch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();......
  • 软件app开发费用,你需要知道这些
    在当今数字化时代,软件app开发已成为企业和创业者的关键业务领域之一。然而,对于许多人来说,软件app开发费用仍然是一个复杂而且难以理解的话题。本文将对软件开发费用进行解析,帮助企业和个人更好地理解软件app开发过程中可能涉及的费用构成以及如何更有效地进行预算和规划。1.项目规......