zoukankan      html  css  js  c++  java
  • hdu 3879 方案选择

    每日一水~~~

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <vector>
     4 #define oo 0x3f3f3f3f
     5 #define N 55010
     6 using namespace std;
     7 
     8 struct Edge {
     9     int u, v, f;
    10     Edge( int u, int v, int f ):u(u),v(v),f(f){}
    11 };
    12 
    13 int n, m, src, dst;
    14 vector<Edge> edge;
    15 vector<int> g[N];
    16 int dep[N], cur[N], qu[N], bg, ed, idc;
    17 int sump;
    18 
    19 void init() {
    20     for( int i=1; i<=n+m+2; i++ )
    21         g[i].clear();
    22     edge.clear();
    23     sump = 0;
    24     idc = 0;
    25 }
    26 void adde( int u, int v, int f ) {
    27     g[u].push_back( edge.size() );
    28     edge.push_back( Edge(u,v,f) );
    29     g[v].push_back( edge.size() );
    30     edge.push_back( Edge(v,u,0) );
    31 }
    32 bool bfs() {
    33     memset( dep, 0, sizeof(dep) );
    34     qu[bg=ed=1] = src;
    35     dep[src] = 1;
    36     while( bg<=ed ) {
    37         int u=qu[bg++];
    38         for( int t=0; t<g[u].size(); t++ ) {
    39             Edge &e = edge[g[u][t]];
    40             if( e.f && !dep[e.v] ) {
    41                 dep[e.v] = dep[e.u] + 1;
    42                 qu[++ed] = e.v;
    43             }
    44         }
    45     }
    46     return dep[dst];
    47 }
    48 int dfs( int u, int a ) {
    49     if( u==dst || a==0 ) return a;
    50     int remain=a, past=0, na;
    51     for( int &t=cur[u]; t<g[u].size(); t++ ) {
    52         Edge &e = edge[g[u][t]];
    53         Edge &ve = edge[g[u][t]^1];
    54         if( e.f && dep[e.v]==dep[e.u]+1 && (na=dfs(e.v,min(remain,e.f))) ) {
    55             remain -= na;
    56             past += na;
    57             e.f -= na;
    58             ve.f += na;
    59             if( !remain ) break;
    60         }
    61     }
    62     return past;
    63 }
    64 int maxflow() {
    65     int flow = 0;
    66     while( bfs() ) {
    67         memset( cur, 0, sizeof(cur) );
    68         flow += dfs(src,oo);
    69     }
    70     return flow;
    71 }
    72 int main() {
    73     while( scanf( "%d%d", &n, &m )==2 ) {
    74         init();
    75         src = n+m+1;
    76         dst = src+1;
    77         for( int i=1,c; i<=n; i++ ) {
    78             scanf( "%d", &c );
    79             ++idc;
    80             adde( idc, dst, c );
    81         }
    82         for( int i=1,u,v,p; i<=m; i++ ) {
    83             scanf( "%d%d%d", &u, &v, &p );
    84             ++idc;
    85             sump += p;
    86             adde( src, idc, p );
    87             adde( idc, u, oo );
    88             adde( idc, v, oo );
    89         }
    90         printf( "%d
    ", sump-maxflow() );
    91     }
    92 }
    View Code
  • 相关阅读:
    文件的上传&预览&下载学习(五)
    文件的上传&预览&下载学习(四)
    MySQL学习(一)大纲
    MySQL学习(四)锁机制
    MySQL学习(五)事务
    小程序在WXML页面添加的data属性,在点击事件中,获取的属性名皆为小写字母
    CSS解决数字,字母自动换行的问题添加wordbreak:breakall; wordwrap:breakword;
    理解CSS盒模型
    浮动
    对于第四章“流程控制”的学习和认识
  • 原文地址:https://www.cnblogs.com/idy002/p/4531109.html
Copyright © 2011-2022 走看看