zoukankan      html  css  js  c++  java
  • POJ 1459

      1 #include<iostream>
      2 #define MAXN 105
      3 #include"queue"
      4 #define big_num 100000000
      5 using namespace std;
      6 
      7 int _m[MAXN][MAXN];
      8 int Ford_fulkerson(int n, int s, int t, int &F,int g[][MAXN]);
      9 int main()
     10 {
     11     //freopen("acm.acm","r",stdin);
     12     int point;
     13     int np;
     14     int nc;
     15     int edge;
     16     char left;
     17     char right;
     18     char space;
     19     int flow;
     20     int u;
     21     int v;
     22     int i;
     23     int node;
     24     while(cin>>point>>np>>nc>>edge)
     25     {
     26         memset(_m,0,sizeof(_m));
     27         for(i = 0; i < edge; ++ i)
     28         {
     29             cin>>left;
     30             cin>>u;
     31             cin>>space;
     32             cin>>v;
     33             cin>>right;
     34             cin>>flow;
     35             ++ u;
     36             ++ v;
     37             _m[u][v] = flow;
     38         }
     39         for(i = 0; i < np; ++ i)
     40         {
     41             cin>>left;
     42             cin>>u;
     43             cin>>right;
     44             cin>>flow;
     45             ++ u;
     46             _m[0][u] = flow;
     47         }
     48         for(i = 0; i < nc; ++ i)
     49         {
     50             cin>>left; 
     51             cin>>u;
     52             cin>>right;
     53             cin>>flow;
     54             ++ u;
     55             _m[u][point+1] = flow;
     56         }
     57         int F = 0;
     58         while(Ford_fulkerson(point+2,0,point + 1,F,_m));        
     59         cout<<F<<endl;
     60     }
     61 }
     62 
     63 
     64 
     65 int find_path(int m, int s,int t,int pre[MAXN],int g[][MAXN])
     66 {
     67     queue<int> q;        
     68     int * mark = new int[m];
     69     memset(mark,0,sizeof(int)*m);
     70     int x;
     71     mark[s] = 1;               
     72     int i;
     73     q.push(s);                   
     74     while(!q.empty())        
     75     {
     76         x = q.front();            
     77         for(i = 0; i < m; i++)
     78         {
     79             if(g[x][i] > 0 && mark[i] == 0)
     80             {                        
     81                 mark[i] = 1;
     82                 pre[i] = x;    
     83                 if(i == t)            
     84                     return 1;
     85                 q.push(i);        
     86             }
     87         }
     88     q.pop();
     89     }
     90     delete [] mark;
     91     return 0;
     92 }
     93 int Ford_fulkerson(int n, int s, int t, int &F,int g[][MAXN])
     94 {
     95     int i;
     96     int min;
     97     int * pre = new int[n];                    
     98     if(find_path(n,s,t,pre, g) == 0)
     99     {
    100         delete [] pre;
    101         return 0;
    102     }
    103     min = big_num;                
    104     for(i = t; i != s; i = pre[i])
    105         if(g[pre[i]][i] < min)
    106         {
    107             min = g[pre[i]][i];
    108         }
    109     for(i = t; i != s; i = pre[i])
    110     {
    111         g[pre[i]][i] -= min;
    112         g[i][pre[i]] += min;
    113     }
    114     F += min;    
    115     delete []pre;
    116     return 1;
    117 }

    关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。 

    技术网站地址: vmfor.com

  • 相关阅读:
    HDOJ 2095 find your present (2)
    HDOJ 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你
    九度 1337 寻找最长合法括号序列
    九度 1357 疯狂地Jobdu序列
    HDOJ 1280 前m大的数
    九度 1343 城际公路网
    九度 1347 孤岛连通工程
    HDOJ 2151 Worm
    九度 1342 寻找最长合法括号序列II
    九度 1346 会员积分排序
  • 原文地址:https://www.cnblogs.com/gavinsp/p/4563405.html
Copyright © 2011-2022 走看看