• <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>

            我希望你是我獨(dú)家記憶

            一段永遠(yuǎn)封存的記憶,隨風(fēng)而去
            posts - 263, comments - 31, trackbacks - 0, articles - 3
               :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

            USACO——442——(最大流)

            Posted on 2008-08-15 00:26 Hero 閱讀(125) 評論(0)  編輯 收藏 引用 所屬分類: 代碼如詩--ACM

             

            /*
            ID: wangzha4
            LANG: C++
            TASK: milk6
            */
            /*
               Test 1: TEST OK [0.000 secs, 2740 KB]
               Test 2: TEST OK [0.000 secs, 2740 KB]
               Test 3: TEST OK [0.011 secs, 2740 KB]
               Test 4: TEST OK [0.000 secs, 2740 KB]
               Test 5: TEST OK [0.000 secs, 2740 KB]
               Test 6: TEST OK [0.000 secs, 2740 KB]
               Test 7: TEST OK [0.000 secs, 2736 KB]
               Test 8: TEST OK [0.011 secs, 2740 KB]
               Test 9: TEST OK [0.000 secs, 2736 KB]
               Test 10: TEST OK [0.000 secs, 2740 KB]
               Test 11: TEST OK [0.000 secs, 2740 KB]
               Test 12: TEST OK [0.000 secs, 2736 KB]
            */
            //#define Ndebug

            #include 
            <stdio.h>
            #include 
            <stdlib.h>
            #include 
            <string.h>
            #define llong long long

            const int size = 35 ;

            int pren[size] ;//點的前驅(qū)
            llong ncap[size] ;//每個點的最大流量(流出量)
            int visit[size] ;//標(biāo)記該點是否被訪問過
            llong flow[size][size] = {0} ;//邊流量
            int data[1005][3] ;

            int inn, inm ;

            llong num_mincut ;
            //最小割邊的個數(shù)
            llong val_mincut ;//最小割的值

            llong fmin( llong a, llong b )
            {
                
            return a < b ? a : b ;
            }

            void input()
            {
                memset( flow, 
            0sizeof(flow) ) ;

                
            forint i=1; i<=inm; i++ )
                {
                    scanf( 
            "%d %d %d"&data[i][0], &data[i][1], &data[i][2] ) ;
                    flow[data[i][
            0]][data[i][1]] += data[i][2* 1001 + 1 ;
                }
            }

            llong findway() 
            {
            //尋找增廣路徑,返回路徑容量(瓶頸容量)
                memset( visit, 0sizeof(visit) ) ;
                memset( ncap,  
            0sizeof (ncap) ) ;

                llong maxncap 
            = 0 ;//最大流量點的流量
                int maxn = -1 ;  //最大流量點的標(biāo)號
                ncap[1= 999999*99999 ;//初始化原點的流量為無窮大,保證從原點開始尋找

                
            whiletrue )
                {
                    maxncap 
            = 0 ; maxn = -1 ;
                    
            forint i=1; i<=inn; i++ )
                    {
                        
            if!visit[i] && ncap[i]>maxncap )
                        { maxncap 
            = ncap[i] ; maxn = i ; }
                    }
            //找到擁有最大流量且沒有被訪問過的點
                    if-1 == maxn )    return 0 ;//沒有找到增廣路徑
                    if( maxn == inn )    break ;//已經(jīng)找到新的增廣路徑
                    visit[maxn] = 1 ;//標(biāo)記這個點已經(jīng)被訪問過

                    
            forint i=1; i<=inn; i++ )
                    {
            //對maxn的相鄰節(jié)點進(jìn)行權(quán)值更新操作
                        if( flow[maxn][i]>ncap[i] && maxncap>ncap[i] )
                        {
            //節(jié)點流量為邊流量和路徑流量的最小值
                            ncap[i] = fmin( flow[maxn][i], maxncap ) ;
                            pren[i] 
            = maxn ;//該節(jié)點的前驅(qū)節(jié)點為maxn
                        }
                    }
                }
            //while(true)

                maxncap 
            = ncap[inn] ;//路徑流量即為匯點的流量

                
            forint i=inn; i>1; i=pren[i] )
                {
                    flow[pren[i]][i] 
            -= maxncap ;//正向邊 - 路徑容量
                    flow[i][pren[i]] += maxncap ;//反向邊 + 路徑容量
                }

                
            return maxncap ;
            }

            void DFS_sn( int sn )
            {
                visit[sn] 
            = 1 ;

                
            forint i=1; i<=inn; i++ )
                {
                    
            if!visit[i] && flow[sn][i]>0 )    DFS_sn( i ) ;
                }
            }


            void process()
            {
                llong maxflow 
            = 0 ; llong addflow ;

                
            while( ( addflow = findway() ) != 0 )
                {
            //當(dāng)路徑容量不為0
                    maxflow += addflow ;
                }

                val_mincut 
            = maxflow/1001 ;
                num_mincut 
            = maxflow - (llong)(maxflow/1001)*1001 ;
                printf( 
            "%lld %lld\n", val_mincut, num_mincut ) ;

                
            //find_mincut() ;
                
            }

            void output()
            {
                
            if1 == num_mincut )
                {
                    
            forint i=1; i<=inm; i++ )
                    {
                        
            if( val_mincut == data[i][2] )    
                        { printf( 
            "%d\n", i ) ; return ; }
                    }
                }

                memset( visit, 
            0sizeof(visit) ) ;
                DFS_sn( 
            1 ) ;//
                forint i=1; i<=inm; i++ )
                {
                    
            if( visit[data[i][0]] && !visit[data[i][1]] ) {
                        printf( 
            "%d\n", i ) ;
                    }
                }
            }

            int main()
            {
            #ifndef Ndebug
                freopen( 
            "milk6.in""r", stdin ) ;
                freopen( 
            "milk6.out","w",stdout ) ;
            #endif

            #ifdef Ndebug
                freopen( 
            "in.txt""r", stdin ) ;
                freopen( 
            "out.txt""w", stdout ) ;
            #endif

                
            while( scanf( "%d %d"&inn, &inm ) != EOF )
                {
                    input() ;

                    process() ;

                    output() ;

                }
            //while

                
            return 0 ;
            }
            久久99精品国产麻豆| 四虎国产精品成人免费久久| 欧美激情精品久久久久久| 99久久久国产精品免费无卡顿 | 久久www免费人成看片| 久久99亚洲综合精品首页 | 国产成人无码精品久久久性色 | 亚洲AV无码成人网站久久精品大| 久久精品国产亚洲AV不卡| 国产精品美女久久久免费| 久久国产精品久久| 久久综合综合久久狠狠狠97色88| 国产一级做a爰片久久毛片| 狠狠色丁香婷婷综合久久来| 婷婷综合久久狠狠色99h| 国产国产成人久久精品| 久久精品国产99久久丝袜 | 香蕉久久影院| 一本色道久久综合狠狠躁| 日韩人妻无码一区二区三区久久| 久久丫精品国产亚洲av| 久久国产一区二区| 久久久91人妻无码精品蜜桃HD| 久久精品综合网| 久久无码人妻一区二区三区| 国产精品久久久久久久久免费| 亚洲综合精品香蕉久久网97 | 色欲综合久久躁天天躁蜜桃| 国产精品久久久久久久久鸭| 久久精品国产只有精品66| 久久综合九色综合网站| 国产精品久久久久久影院| 久久精品国产第一区二区| 尹人香蕉久久99天天拍| 久久99国产精品一区二区| 欧美大战日韩91综合一区婷婷久久青草| 久久久国产打桩机| 亚洲国产精品人久久| 久久频这里精品99香蕉久| 色偷偷888欧美精品久久久| 伊人久久无码中文字幕|