ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

洛谷P3381 (最小费用最大流模板)

2022-04-04 15:01:20  阅读:154  来源: 互联网

标签:洛谷 int cap tot cost rest P3381 const 模板


记得把数组开大一点,不然就RE了。。。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define int long long
 4 const int N=5e5;
 5 const int M=5e5;
 6 const int INF=0x3f3f3f3f;
 7  
 8 int n,m,s,t,ans,d[N],maxflow;
 9 int tot=1,adj[N],nex[M],to[M],cap[M],cost[M];
10 bool walk[N],vis[N];
11  
12 void add(int u,int v,int w,int c){
13     nex[++tot]=adj[u];
14     adj[u]=tot;
15     to[tot]=v;
16     cap[tot]=w;
17     cost[tot]=c;
18 }
19  
20 bool SPFA(){
21     queue<int> q;
22     for(int i=1;i<=n;i++)
23         vis[i]=false,walk[i]=false,d[i]=INF;
24     q.push(s),d[s]=0,vis[s]=true;
25     while(!q.empty()){
26         int u=q.front();q.pop();
27         vis[u]=false;
28         for(int i=adj[u];i;i=nex[i]){
29             int v=to[i];
30             if(cap[i]>0&&d[u]+cost[i]<d[v]){
31                 d[v]=d[u]+cost[i];
32                 if(!vis[v]){
33                     vis[v]=true;
34                     q.push(v);
35                 }
36             }
37         }
38     }
39     return d[t]<INF;
40 }
41  
42 int dinic(int u,int fw){
43     if(u==t){
44         ans+=fw*d[t];
45         return fw;
46     }
47     walk[u]=true;
48     int rest=fw;
49     for(int i=adj[u];i&&rest;i=nex[i]){
50         int v=to[i];
51         if(!walk[v]&&cap[i]>0&&d[u]+cost[i]==d[v]){
52             int k=dinic(v,min(cap[i],rest));
53             if(k){
54                 cap[i]-=k;cap[i^1]+=k;
55                 rest-=k;
56             }
57         }
58     }
59     return fw-rest;
60 }
61  
62 void solve(){
63     maxflow=ans=0;
64     while(SPFA()) maxflow+=dinic(s,INF);
65 }
66  
67 signed main(){
68     cin>>n>>m>>s>>t;
69     for(int i=1;i<=m;i++){
70         int u,v,w,c;
71         cin>>u>>v>>w>>c;
72         add(u,v,w,c);
73         add(v,u,0,-c);
74     }
75     solve();
76     cout<<maxflow<<" "<<ans;
77     return 0;
78 }

 

标签:洛谷,int,cap,tot,cost,rest,P3381,const,模板
来源: https://www.cnblogs.com/yhxnoerror/p/16099177.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有