P3381 【模板】最小费用最大流
创始人
2024-03-17 10:25:55
0

hello everyone,大家好,我是love——putter,好久没发题解了(因为没素材了)所以,今天来发一下P3381 【模板】最小费用最大流的题解

题目描述

给出一个包含 nn 个点和 mm 条边的有向图(下面称其为网络) G=(V,E)G=(V,E),该网络上所有点分别编号为 1 \sim n1∼n,所有边分别编号为 1\sim m1∼m,其中该网络的源点为 ss,汇点为 tt,网络上的每条边 (u,v)(u,v) 都有一个流量限制 w(u,v)w(u,v) 和单位流量的费用 c(u,v)c(u,v)。

你需要给每条边 (u,v)(u,v) 确定一个流量 f(u,v)f(u,v),要求:

  1. 0 \leq f(u,v) \leq w(u,v)0≤f(u,v)≤w(u,v)(每条边的流量不超过其流量限制);
  2. \forall p \in \{V \setminus \{s,t\}\}∀p∈{V∖{s,t}},\sum_{(i,p) \in E}f(i,p)=\sum_{(p,i)\in E}f(p,i)∑(i,p)∈E​f(i,p)=∑(p,i)∈E​f(p,i)(除了源点和汇点外,其他各点流入的流量和流出的流量相等);
  3. \sum_{(s,i)\in E}f(s,i)=\sum_{(i,t)\in E}f(i,t)∑(s,i)∈E​f(s,i)=∑(i,t)∈E​f(i,t)(源点流出的流量等于汇点流入的流量)。

定义网络 GG 的流量 F(G)=\sum_{(s,i)\in E}f(s,i)F(G)=∑(s,i)∈E​f(s,i),网络 GG 的费用 C(G)=\sum_{(i,j)\in E} f(i,j) \times c(i,j)C(G)=∑(i,j)∈E​f(i,j)×c(i,j)。

你需要求出该网络的最小费用最大流,即在 F(G)F(G) 最大的前提下,使 C(G)C(G) 最小。

输入格式

输入第一行包含四个整数 n,m,s,tn,m,s,t,分别代表该网络的点数 nn,网络的边数 mm,源点编号 ss,汇点编号 tt。

接下来 mm 行,每行四个整数 u_i,v_i,w_i,c_iui​,vi​,wi​,ci​,分别代表第 ii 条边的起点,终点,流量限制,单位流量费用。

输出格式

输出两个整数,分别为该网络的最大流 F(G)F(G),以及在 F(G)F(G) 最大的前提下,该网络的最小费用 C(G)C(G)。

输入输出样例

输入 #1复制

4 5 4 3
4 2 30 2
4 3 20 3
2 3 20 1
2 1 30 9
1 3 40 5

输出 #1复制

50 280

说明/提示

对于 100\%100% 的数据,1 \leq n \leq 5\times 10^31≤n≤5×103,1 \leq m \leq 5 \times 10^41≤m≤5×104,1 \leq s,t \leq n1≤s,t≤n,u_i \neq v_iui​=vi​,0 \leq w_i,c_i \leq 10^30≤wi​,ci​≤103,且该网络的最大流和最小费用 \leq 2^{31}-1≤231−1。

输入数据随机生成。

代码,(答案仅能得54分 求大佬帮忙。)

#include
#define ll long long
using namespace std;

const int N=5e3+5;
const int M=5e4+5;

struct edge {
    int v;
    int r;
    int c;
    int next;
} es[M<<1];

int n,m,s,t,cnt=1;
int head[N];
queue q;
int cost[N],dis[N],pre[N];
bool vis[N];
ll maxflow,mincost;

void addedge(int u,int v,int w,int c)
{
    cnt++;
    es[cnt].v=v;
    es[cnt].r=w;
    es[cnt].c=c;
    es[cnt].next=head[u];
    head[u]=cnt;
}

bool SPFA()
{
    memset(cost,0x7f,sizeof(cost));
    memset(dis,0x7f,sizeof(dis));
    memset(vis,0,sizeof(vis));
    cost[s]=0;
    q.push(s);
    vis[s]=true;
    while (!q.empty())
    {
        int u=q.front();
        q.pop();
        vis[u]=false;
        for (int i=head[u];i>0;i=es[i].next)
        {
            edge e=es[i];
            if (e.r>0 && cost[u]+e.c             {
                cost[e.v]=cost[u]+e.c;
                pre[e.v]=i;
                dis[e.v]=min(dis[u],e.r);
                if (!vis[e.v])
                {
                    q.push(e.v);
                    vis[e.v]=true;
                }
            }
        }
    }
}

void minCostMaxFlow()
{
    while (SPFA())
    {
        int now=t;
        maxflow+=dis[t];
        mincost+=dis[t]*cost[t];
        while (now!=s)
        {
            int loc=pre[now];
            es[loc].r-=dis[t];
            es[loc^1].r+=dis[t];
            now=es[loc^1].v;
        }
    }
}

int main()
{
    int u,v,w,c;
    cin>>n>>m>>s>>t;
    for (int i=1;i<=m;i++)
    {
        cin>>u>>v>>w>>c;
        addedge(u,v,w,c);
        addedge(v,u,0,-c);
    }
    minCostMaxFlow();
    cout<     return 0;
}

相关内容

热门资讯

Python|位运算|数组|动... 目录 1、只出现一次的数字(位运算,数组) 示例 选项代...
张岱的人物生平 张岱的人物生平张岱(414年-484年),字景山,吴郡吴县(今江苏苏州)人。南朝齐大臣。祖父张敞,东...
西游西后传演员女人物 西游西后传演员女人物西游西后传演员女人物 孙悟空 六小龄童 唐僧 徐少华 ...
名人故事中贾岛作诗内容简介 名人故事中贾岛作诗内容简介有一次,贾岛骑驴闯了官道.他正琢磨着一句诗,名叫《题李凝幽居》全诗如下:闲...
和男朋友一起优秀的文案? 和男朋友一起优秀的文案?1.希望是惟一所有的人都共同享有的好处;一无所有的人,仍拥有希望。2.生活,...
戴玉手镯的好处 戴玉手镯好还是... 戴玉手镯的好处 戴玉手镯好还是碧玺好 女人戴玉?戴玉好还是碧玺好点佩戴手镯,以和田玉手镯为佳!相嫌滑...
依然什么意思? 依然什么意思?依然(汉语词语)依然,汉语词汇。拼音:yī    rán基本解释:副词,指照往常、依旧...
高尔基的散文诗 高尔基的散文诗《海燕》、《大学》、《母亲》、《童年》这些都是比较出名的一些代表作。
心在飞扬作者简介 心在飞扬作者简介心在飞扬作者简介如下。根据相关公开资料查询,心在飞扬是一位优秀的小说作者,他的小说作...
卡什坦卡的故事赏析? 卡什坦卡的故事赏析?讲了一只小狗的故事, 我也是近来才读到这篇小说. 作家对动物的拟人描写真是惟妙...
林绍涛为简艾拿绿豆糕是哪一集 林绍涛为简艾拿绿豆糕是哪一集第三十二集。 贾宽认为是阎帅间接导致刘映霞住了院,第二天上班,他按捺不...
小爱同学是女生吗小安同学什么意... 小爱同学是女生吗小安同学什么意思 小爱同学,小安同学说你是女生。小安是男的。
内分泌失调导致脸上长斑,怎么调... 内分泌失调导致脸上长斑,怎么调理内分泌失调导致脸上长斑,怎么调理先调理内分泌,去看中医吧,另外用好的...
《魔幻仙境》刺客,骑士人物属性... 《魔幻仙境》刺客,骑士人物属性加点魔幻仙境骑士2功1体质
很喜欢她,该怎么办? 很喜欢她,该怎么办?太冷静了!! 太理智了!爱情是需要冲劲的~不要考虑着考虑那~否则缘...
言情小说作家 言情小说作家我比较喜欢匪我思存的,很虐,很悲,还有梅子黄时雨,笙离,叶萱,还有安宁的《温暖的玄》 小...
两个以名人的名字命名的风景名胜... 两个以名人的名字命名的风景名胜?快太白楼,李白。尚志公园,赵尚志。
幼儿教育的代表人物及其著作 幼儿教育的代表人物及其著作卡尔威特的《卡尔威特的教育》,小卡尔威特,他儿子成了天才后写的《小卡尔威特...
海贼王中为什么说路飞打凯多靠霸... 海贼王中为什么说路飞打凯多靠霸气升级?凯多是靠霸气升级吗?因为之前刚到时确实打不过人家因为路飞的实力...
运气不好拜财神有用吗运气不好拜... 运气不好拜财神有用吗运气不好拜财神有没有用1、运气不好拜财神有用。2、拜财神上香前先点蜡烛,照亮人神...