zoukankan      html  css  js  c++  java
  • POJ 1273

     1 #include<iostream>
     2 #include<stdio.h>
     3 #define big_num 1000000000
     4 #define MAXN 250
     5 #include"queue"
     6 using namespace std;
     7 
     8 int _m[MAXN][MAXN];
     9 int Ford_fulkerson(int m, int s, int t, int &F,int g[][MAXN]);
    10 int find_path(int m, int s,int t,int pre[MAXN],int g[][MAXN]);
    11 
    12 int main()
    13 {
    14     //freopen("acm.acm","r",stdin);
    15     int p;
    16     int s;
    17     int i;
    18     int j;
    19     int w;
    20     int m;
    21     int n;
    22     while(cin>>s>>p)
    23     {
    24         memset(_m,0,sizeof(_m));
    25     //    memset(pre,0,sizeof(pre));
    26         for(i = 0; i < s; ++ i)
    27         {
    28             cin>>m>>n;
    29             cin>>w;
    30             _m[m-1][n-1] += w;
    31         }
    32         int F = 0;
    33         while(Ford_fulkerson(p,0,p-1,F,_m));
    34         cout<<F<<endl;
    35     }
    36     system("PAUSE");
    37 }
    38 /////////////////////////////////////////////////////////////
    39 //网络流(Ford_fulkerson算法)自己写的模板~
    40 //#define big_num 1000000000
    41 //#include"queue"
    42 //int _m[MAXN][MAXN];
    43 /////////////////////////////////////////////////////////////
    44 int find_path(int m, int s,int t,int pre[MAXN],int g[][MAXN])
    45 {
    46     queue<int> q;        
    47     int * mark = new int[m];
    48     memset(mark,0,sizeof(int)*m);
    49     int x;
    50     mark[s] = 1;               
    51     int i;
    52     q.push(s);                   
    53     while(!q.empty())        
    54     {
    55         x = q.front();            
    56         for(i = 0; i < m; i++)
    57         {
    58             if(g[x][i] > 0 && mark[i] == 0)
    59             {                        
    60                 mark[i] = 1;
    61                 pre[i] = x;    
    62                 if(i == t)            
    63                     return 1;
    64                 q.push(i);        
    65             }
    66         }
    67     q.pop();
    68     }
    69     delete [] mark;
    70     return 0;
    71 }
    72 int Ford_fulkerson(int n, int s, int t, int &F,int g[][MAXN])
    73 {
    74     int i;
    75     int min;
    76     int * pre = new int[n];                    
    77     if(find_path(n,s,t,pre, g) == 0)
    78     {
    79         delete [] pre;
    80         return 0;
    81     }
    82     min = big_num;                
    83     for(i = t; i != s; i = pre[i])
    84         if(g[pre[i]][i] < min)
    85         {
    86             min = g[pre[i]][i];
    87         }
    88     for(i = t; i != s; i = pre[i])
    89     {
    90         g[pre[i]][i] -= min;
    91         g[i][pre[i]] += min;
    92     }
    93     F += min;             
    94     delete []pre;
    95     return 1;
    96 }

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

    技术网站地址: vmfor.com

  • 相关阅读:
    无限维
    黎曼流形
    why we need virtual key word
    TOJ 4119 Split Equally
    TOJ 4003 Next Permutation
    TOJ 4002 Palindrome Generator
    TOJ 2749 Absent Substrings
    TOJ 2641 Gene
    TOJ 2861 Octal Fractions
    TOJ 4394 Rebuild Road
  • 原文地址:https://www.cnblogs.com/gavinsp/p/4563348.html
Copyright © 2011-2022 走看看