zoukankan      html  css  js  c++  java
  • 网络流--最小费用最大流MCMF模板

    标准大白书式模板

     1 #include<stdio.h>        //大概这么多头文件昂
     2 #include<string.h>
     3 #include<vector>
     4 #include<queue>
     5 #include<algorithm>
     6 using namespace std;
     7 const int maxm=10000+100;    //最大点数
     8 const int INF=0x3f3f3f3f;
     9 
    10 struct edge{        //边:起点、终点、容量、流量、单位费用
    11     int from,to,c,f,cost;
    12     edge(int a,int b,int m,int n,int p):from(a),to(b),c(m),f(n),cost(p){}
    13 };
    14 
    15 int aabs(int a){
    16     return a>=0?a:-a;
    17 }
    18 
    19 struct MCMF{
    20     int m,s,t;
    21     vector<edge>e;
    22     vector<int>g[maxm];
    23     int dis[maxm],a[maxm],p[maxm];
    24     bool vis[maxm];
    25 
    26     void init(int n){        //初始化函数
    27         for(int i=0;i<=n;i++)g[i].clear();
    28         e.clear();
    29     }
    30 
    31     void add(int a,int b,int c,int v){    //加边函数
    32         e.push_back(edge(a,b,c,0,v));
    33         e.push_back(edge(b,a,0,0,-v));
    34         m=e.size();
    35         g[a].push_back(m-2);
    36         g[b].push_back(m-1);
    37     }
    38 
    39     bool spfa(int& flow,int& cost){
    40         memset(dis,0x3f,sizeof(dis));
    41         memset(vis,0,sizeof(vis));
    42         queue<int>q;
    43         q.push(s);
    44         vis[s]=1;
    45         dis[s]=0;
    46         p[s]=0;
    47         a[s]=INF;
    48         while(!q.empty()){
    49             int u=q.front();q.pop();
    50             vis[u]=0;
    51             for(int i=0;i<g[u].size();i++){
    52                 edge tmp=e[g[u][i]];
    53                 if(dis[tmp.to]>dis[u]+tmp.cost&&tmp.c>tmp.f){
    54                     dis[tmp.to]=dis[u]+tmp.cost;
    55                     p[tmp.to]=g[u][i];
    56                     a[tmp.to]=min(a[u],tmp.c-tmp.f);
    57                     if(!vis[tmp.to]){
    58                         q.push(tmp.to);
    59                         vis[tmp.to]=1;
    60                     }
    61                 }
    62             }
    63         }
    64         if(dis[t]==INF)return 0;
    65         flow+=a[t];
    66         cost+=dis[t]*a[t];
    67         int u=t;
    68         while(u!=s){
    69             e[p[u]].f+=a[t];
    70             e[p[u]^1].f-=a[t];
    71             u=e[p[u]].from;
    72         }
    73         return 1;
    74     }
    75 
    76     int MF(int s,int t){        调用的计算最小费用函数
    77         this->s=s;this->t=t;
    78         int flow=0,cost=0;
    79         while(spfa(flow,cost));
    80         return cost;
    81     }
    82 
    83 };
  • 相关阅读:
    ‘Host’ is not allowed to connect to this mysql server
    centos7安装mysql
    further configuration avilable 不见了
    Dynamic Web Module 3.0 requires Java 1.6 or newer
    hadoop启动 datanode的live node为0
    ssh远程访问失败 Centos7
    Linux 下的各种环境安装
    Centos7 安装 python2.7
    安装scala
    Centos7 安装 jdk 1.8
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/4508896.html
Copyright © 2011-2022 走看看