zoukankan      html  css  js  c++  java
  • [USACO09JAN]Total Flow

    OJ题号:

    BZOJ3996、洛谷2936、SPOJ-MTOTALF、SCU3353

    思路:

    题目的要求是将所有边合并成一条边,求合并后的流量。
    实际上相当于直接求最大流。
    EdmondsKarp模板即可。

     1 #include<iostream>
     2 #include<vector>
     3 #include<queue>
     4 #include<cstring>
     5 #include<algorithm>
     6 const int V=52,E=700,s=0,t=25,inf=0x7fffffff;
     7 inline int idx(const char ch) {
     8     return (ch<='Z')?(ch-'A'):(ch-'a'+26);
     9 }
    10 struct Edge {
    11     int from,to,remain;
    12 };
    13 int sz=0;
    14 Edge e[E<<1];
    15 std::vector<int> g[V];
    16 inline void add_edge(const int u,const int v,const int c) {
    17     e[sz]=(Edge){u,v,c};
    18     g[u].push_back(sz);
    19     sz++;
    20 }
    21 int p[V],a[V];
    22 inline int Augment() {
    23     memset(a,0,sizeof a);
    24     a[s]=inf;
    25     std::queue<int> q;
    26     q.push(s);
    27     while(!q.empty()) {
    28         int x=q.front();
    29         q.pop();
    30         for(unsigned i=0;i<g[x].size();i++) {
    31             Edge &y=e[g[x][i]];
    32             if(!a[y.to]&&y.remain) {
    33                 p[y.to]=g[x][i];
    34                 a[y.to]=std::min(a[x],y.remain);
    35                 q.push(y.to);
    36             }
    37         }
    38         if(a[t]) break;
    39     }
    40     return a[t];
    41 }
    42 inline int EdmondsKarp() {
    43     int maxflow=0;
    44     while(int flow=Augment()) {
    45         for(int i=t;i!=s;i=e[p[i]].from) {
    46             e[p[i]].remain-=flow;
    47             e[p[i]^1].remain+=flow;
    48         }
    49         maxflow+=flow;
    50     }
    51     return maxflow;
    52 }
    53 int main() {
    54     std::ios_base::sync_with_stdio(false);
    55     std::cin.tie(NULL);
    56     int n;
    57     std::cin>>n;
    58     for(int i=0;i<n;i++) {
    59         char u,v;
    60         int c;
    61         std::cin>>u>>v>>c;
    62         add_edge(idx(u),idx(v),c);
    63         add_edge(idx(v),idx(u),0);
    64     }
    65     std::cout<<EdmondsKarp()<<std::endl;
    66     return 0;
    67 }
  • 相关阅读:
    java大文件(视频)上传源代码
    java大文件(视频)上传源码
    java大文件(视频)上传插件
    java大文件(视频)上传控件
    java大文件(视频)上传组件
    jsp大文件(视频)切割上传
    jsp大文件(视频)切片上传
    jsp大文件(视频)分段上传
    jsp大文件(视频)分块上传
    ckeditor粘贴word文档图片的解决方案
  • 原文地址:https://www.cnblogs.com/skylee03/p/7248293.html
Copyright © 2011-2022 走看看