• <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
               :: 首頁(yè) :: 新隨筆 ::  :: 聚合  :: 管理

            USACO——442——(最大流)

            Posted on 2008-08-15 00:26 Hero 閱讀(125) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 代碼如詩(shī)--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] ;//點(diǎn)的前驅(qū)
            llong ncap[size] ;//每個(gè)點(diǎn)的最大流量(流出量)
            int visit[size] ;//標(biāo)記該點(diǎn)是否被訪問(wèn)過(guò)
            llong flow[size][size] = {0} ;//邊流量
            int data[1005][3] ;

            int inn, inm ;

            llong num_mincut ;
            //最小割邊的個(gè)數(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 ;//最大流量點(diǎn)的流量
                int maxn = -1 ;  //最大流量點(diǎn)的標(biāo)號(hào)
                ncap[1= 999999*99999 ;//初始化原點(diǎn)的流量為無(wú)窮大,保證從原點(diǎn)開(kāi)始尋找

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

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

                maxncap 
            = ncap[inn] ;//路徑流量即為匯點(diǎn)的流量

                
            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热| 久久亚洲精品人成综合网| 国产精品久久久久无码av| AV无码久久久久不卡蜜桃| 久久精品国内一区二区三区| 久久精品无码一区二区三区免费 | 久久无码AV中文出轨人妻| 国产成人久久久精品二区三区| 国产真实乱对白精彩久久| 久久国产成人午夜AV影院| 亚洲国产美女精品久久久久∴ | 亚洲av伊人久久综合密臀性色| 久久ZYZ资源站无码中文动漫| 国产精久久一区二区三区| 香蕉99久久国产综合精品宅男自| 99蜜桃臀久久久欧美精品网站| 99久久精品日本一区二区免费| 国产亚洲美女精品久久久| 97精品依人久久久大香线蕉97| 久久99精品久久久久久9蜜桃| 亚洲国产精品一区二区久久hs| 成人a毛片久久免费播放| 午夜精品久久久久久99热| 久久综合狠狠综合久久97色| 久久ww精品w免费人成| 久久久久亚洲AV无码麻豆| AV无码久久久久不卡蜜桃| 99久久国产综合精品女同图片| 无码八A片人妻少妇久久| 久久影视国产亚洲| 久久精品中文字幕一区| 久久精品国产精品亚洲人人| 青青青国产精品国产精品久久久久| 亚洲精品无码久久久久sm| 三级韩国一区久久二区综合| 久久国产美女免费观看精品| 精品人妻伦一二三区久久 |