zoukankan      html  css  js  c++  java
  • bzoj3396[Usaco2009 Jan]Total flow 水流*

    bzoj3396[Usaco2009 Jan]Total flow 水流

    题意:

    求无环图的最大流。边数≤700。

    题解:

    管它有没有环。注意本题的节点标号既有大写字母,也有小写字母。

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <queue>
     5 #define inc(i,j,k) for(int i=j;i<=k;i++)
     6 #define maxn 100
     7 #define INF 0x3fffffff
     8 using namespace std;
     9 
    10 struct e{int t,c,n;}es[maxn*80]; int g[maxn],ess;
    11 void pe(int f,int t,int c){
    12     es[++ess]=(e){t,c,g[f]}; g[f]=ess; es[++ess]=(e){f,0,g[t]}; g[t]=ess;
    13     es[++ess]=(e){f,c,g[t]}; g[t]=ess; es[++ess]=(e){t,0,g[f]}; g[f]=ess;
    14 }
    15 queue<int>q; int h[maxn];
    16 bool bfs(int s,int t){
    17     while(!q.empty())q.pop(); memset(h,-1,sizeof(h)); q.push(s); h[s]=0;
    18     while(!q.empty()){
    19         int x=q.front(); q.pop();
    20         for(int i=g[x];i;i=es[i].n)if(es[i].c&&h[es[i].t]==-1){h[es[i].t]=h[x]+1; q.push(es[i].t);}
    21     }
    22     return h[t]!=-1;
    23 }
    24 int dfs(int x,int t,int f){
    25     if(x==t)return f; int u=0;
    26     for(int i=g[x];i;i=es[i].n)if(es[i].c&&h[es[i].t]==h[x]+1){
    27         int w=dfs(es[i].t,t,min(f,es[i].c)); f-=w; u+=w;
    28         es[i].c-=w; es[i^1].c+=w; if(f==0)return u;
    29     }
    30     if(u==0)h[x]=-1; return u;
    31 }
    32 int dinic(int s,int t){
    33     int f=0; while(bfs(s,t))f+=dfs(s,t,INF); return f;
    34 }
    35 int s,t,n;
    36 int main(){
    37     scanf("%d",&n); ess=1; s=0; t='Z'-'A';
    38     inc(i,1,n){char x[3],y[3]; int z; scanf("%s%s%d",x,y,&z); pe(x[0]-'A',y[0]-'A',z);}
    39     printf("%d",dinic(s,t)); return 0;
    40 }

    20160908

  • 相关阅读:
    mysql 优化20点
    java function
    设计模式 概览
    Linux安装java1.8并配置环境变量
    windows下一次执行多个sql文件
    mybatis查询结果为空时的返回值问题
    Java中Json与String互转
    SSM Service自动注入失败
    本地安装Mysql5.7过程中出现的一系列问题
    解决本地工具无法连接服务器上的mysql的问题
  • 原文地址:https://www.cnblogs.com/YuanZiming/p/5875540.html
Copyright © 2011-2022 走看看