• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            #include <iostream>
            #include 
            <queue>
            #include 
            <algorithm>
            #include 
            <climits>

            using  namespace std;

            #define N  210

            int  point, edge;
            int  graph[N][N];
            int  pre[N];
            int  result= 0;

            void update( int mflow )
            {
                
            int b= point;
                
                result
            += mflow;
                
            while( pre[b]!= 0 )
                
            {
                    graph[ pre[b] ][ b]
            -= mflow;
                    graph[b ][ pre[b] ]
            += mflow;
                    
                    b
            = pre[b];
                }
                
            }


            void bfs()
            {
                
            whiletrue )
                
            {
                    
            bool visite[N]= false };
                    
            int  minflow[N];
                    queue
            <int>  q;
                    
                    q.push( 
            1 );
                    visite[
            1]= true;
                    minflow[
            1]= INT_MAX;
                    memset( pre, 
            0sizeof(pre) );
                    
                    
            while!q.empty() )
                    
            {
                        
            int t= q.front();
                        q.pop();
                        
                        
            forint j= 1; j<= point; ++j )
                            
            if!visite[j] && graph[t][j]> 0 )
                            
            {
                                minflow[j]
            = min( minflow[t], graph[t][j] );
                                pre[j]
            = t;
                                
                                q.push( j );
                                visite[j]
            = true;
                            }

                        
                        
            if( pre[point]> 0 ) break;
                    }

                    
                    
            if ( pre[point]> 0 )  update( minflow[point] );
                    
            else                  break;
                }

            }


            int main()
            {
                
            while( scanf("%d%d"&edge, &point )!= EOF )
                
            {
                    memset( graph, 
            0sizeof(graph) );
                    
                    
            forint i= 0; i< edge; ++i )
                    
            {
                        
            int a, b, d;
                        scanf(
            "%d%d%d"&a, &b, &d );
                        
                        graph[a][b]
            += d;    //   not just one ditch
                    }

                    
                    result
            = 0;
                    bfs();
                    printf(
            "%d\n", result );
                }

                
                
            return 0;
            }




            #include <stdio.h>
            #include 
            <stdlib.h>
            #include 
            <string.h>

            #define Min(a,b) ( (a)< (b)?(a): (b) )

            int  m, n;
            int  map[210][210];
            bool visite[210];
            int  path[210], dist[210], minflow[210];

            int max_flow()
            {
                
            forint i= 0; i<= n; ++i )
                {
                    visite[i]
            = false;    dist[i]= 0;
                    path[i]
            = 1;          minflow[i]= 0;
                }
                
                visite[
            1]= true;   minflow[1]= 1<< 30;
                
            forint i= 1; i<= n; ++i )
                dist[i]
            = map[1][i], minflow[i]= map[1][i];
                
                
            forint i= 1; i< n; ++i )
                {
                    
            int min= 1<< 30, t= -1;
                    
                    
            forint j= 1; j<= n; j++ )
                    
            if!visite[j] && min> dist[j] && dist[j]> 0 ) min= dist[j],t= j;
                    
                    
            if( t== -1 ) break;
                    
                    visite[t]
            = true;
                    
            forint j= 1; j<= n; ++j )
                        
            if!visite[j] && map[t][j]> 0 && 
                           ( dist[t]
            > 0 && dist[t]+ map[t][j]< dist[j] || dist[j]== 0 ) )
                        {
                            dist[j]
            = dist[t]+ map[t][j];
                            path[j]
            = t;
                            
                            minflow[j]
            = Min( map[t][j], minflow[t] );
                        }
                }
                
                
            return minflow[n];
            }

            int update()
            {
                
            int f, total= 0;
                
                
            while( ( f= max_flow() )!= 0 )
                {
                    
            int j= n;
                    
                    
            while( path[j]!= j )
                    {
                        map[ path[j] ][j]
            -= f;
                        map[j][ path[j] ]
            += f;
                        
                        j
            = path[j];
                    }
                    
                    total
            += f;
                }
                
                
            return total;
            }

            int main()
            {
                
            while( scanf("%d%d",&m,&n)!= EOF )
                {
                    memset( map, 
            0sizeof(map) );
                    
                    
            forint i= 0; i< m; ++i )
                    {
                        
            int a, b, c;
                        scanf(
            "%d%d%d",&a,&b,&c);
                        
                        map[a][b]
            += c;
                    }
                    
                    printf(
            "%d\n", update() );
                }
                
                
            return 0;
            }



            #include <iostream>
            #include 
            <queue>
            #include 
            <algorithm>

            using namespace std;

            int  m, n;
            int  map[210][210], h[210],wt[210], flow[210][210];

            int max_flow()
            {
                memset( wt, 
            0sizeof(wt) );
                memset( h, 
            0sizeof(h) );
                
                queue
            <int> Q;
                Q.push(
            1); wt[1]= 1<<30; wt[n]= -1<<30;
                h[
            1]= n;
                
                
            int total= 0;
                
            while!Q.empty() )
                {
                    
            int u= Q.front(); Q.pop();
                    
                    
            forint v= 1; v<= n; ++v )
                    {
                        
            int f= min( wt[u], map[u][v] );
                        
                        
            if( f> 0 &&  ( u== 1 || h[u]== h[v]+ 1 ) )
                        {
                            map[u][v]
            -= f, map[v][u]+= f;
                            wt[u]
            -= f, wt[v]+= f;
                            
                            
            if( v== n ) total+= f;
                            
                            
            if( v!= 1 && v!= n ) Q.push(v);
                        }
                    }            
                    
                    
            if( u!= 1 && u!= n && wt[u]> 0 )
                    {
                        h[u]
            ++;
                        Q.push(u);
                    }
                }
                
                printf(
            "%d\n", total );
            }
                
            int main()
            {
                
            while( scanf("%d%d",&m,&n)!= EOF )
                {
                    memset( map, 
            0sizeof(map) );
                    
                    
            forint i= 0; i< m; ++i )
                    {    
                        
            int a, b, c;
                        
                        scanf(
            "%d%d%d",&a,&b,&c);
                        map[a][b]
            += c;
                    }
                    
                    max_flow();
                }
                
                
            return 0;
            }
            posted on 2008-11-04 14:15 Darren 閱讀(222) 評論(1)  編輯 收藏 引用

            評論:
            # re: Pku 1273 Drainage Ditches 2009-01-12 12:02 | 風之傷
            謝謝大牛,寫得很清晰,受教了~~  回復  更多評論
              
            久久久久亚洲精品日久生情| 91精品国产91久久久久久青草| 国产日韩久久久精品影院首页| 久久久久亚洲AV无码专区网站| 伊人久久精品无码二区麻豆| 99热都是精品久久久久久| 久久午夜福利电影| 久久久国产精品亚洲一区| 日韩AV毛片精品久久久| 99久久婷婷国产一区二区| 四虎国产精品成人免费久久| 久久99精品久久久久久9蜜桃| 一本色道久久99一综合| 久久精品中文字幕久久| 2021久久精品国产99国产精品| 亚洲精品无码成人片久久| 亚洲人成伊人成综合网久久久 | 久久久久国产亚洲AV麻豆| 九九久久99综合一区二区| 国产精品一久久香蕉国产线看观看| 久久天天躁夜夜躁狠狠| 久久精品国产WWW456C0M| 久久Av无码精品人妻系列| 九九精品久久久久久噜噜| 国产日韩久久久精品影院首页| 久久99热狠狠色精品一区| 久久综合九色综合网站| 99久久超碰中文字幕伊人| 麻豆亚洲AV永久无码精品久久| 久久人人爽人人爽人人片AV不| 久久久精品久久久久特色影视| 久久国产影院| 久久一区二区三区免费| 久久久亚洲精品蜜桃臀| 亚洲国产成人精品女人久久久 | 久久精品国产亚洲AV电影| 久久精品亚洲精品国产色婷| 久久99精品久久久久久hb无码| 久久亚洲中文字幕精品有坂深雪 | 日韩影院久久| 久久SE精品一区二区|