• <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久久国产免费福利| 久久久久亚洲精品男人的天堂| 一本大道久久a久久精品综合| 久久精品国产亚洲一区二区三区| 久久久久一级精品亚洲国产成人综合AV区| 久久亚洲2019中文字幕| 亚洲成色www久久网站夜月| 久久精品aⅴ无码中文字字幕重口| 久久免费小视频| 99久久99久久精品国产片果冻| 狠狠色综合网站久久久久久久高清 | 久久久老熟女一区二区三区| 国产精品亚洲综合专区片高清久久久| 亚洲国产成人久久综合区| 亚洲AV无码一区东京热久久| 亚洲精品WWW久久久久久| 精品精品国产自在久久高清| yy6080久久| 777久久精品一区二区三区无码| 伊人久久五月天| 久久久久久狠狠丁香| 亚洲国产精品无码久久一线| 午夜精品久久久久成人| 亚洲狠狠综合久久| 久久夜色精品国产欧美乱| 亚洲午夜久久久| 久久精品一区二区影院 | www.久久热.com| 狠狠综合久久AV一区二区三区| 亚洲综合久久久| 伊人久久五月天| 久久亚洲精品国产亚洲老地址 | 国产美女亚洲精品久久久综合| 欧美日韩精品久久久久| 99久久精品免费| 久久久久久综合一区中文字幕 | 国产精品99久久精品爆乳| 97久久超碰国产精品2021| AV狠狠色丁香婷婷综合久久| 久久精品成人欧美大片|