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

            我希望你是我獨家記憶

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

            P1719

            Posted on 2008-09-10 21:14 Hero 閱讀(121) 評論(0)  編輯 收藏 引用 所屬分類: 代碼如詩--ACM
              1 // 1719 Accepted 5908K 204MS C++ 2057B PKU
              2 
              3 //二部圖匹配
              4 //X : col 1 2 3 4 5 6
              5 //Y : row 1 2 3 4
              6 //每個col到row有兩條有向邊
              7 
              8 #include <stdio.h>
              9 #include <string.h>
             10 #include <stdlib.h>
             11 
             12 const int size = 1200 ;
             13 int edge[size][size] ;
             14 
             15 int A[size] ;
             16 int B[size] ;
             17 
             18 int innum ;
             19 int row, col ;
             20 
             21 void input()
             22 {
             23     memset( edge, 0sizeof(edge) ) ;
             24 
             25     scanf( "%d %d"&row, &col ) ;
             26     int ina, inb ;
             27     forint c=1; c<=col; c++ )
             28     {
             29         scanf( "%d %d"&ina, &inb ) ;
             30         edge[c][ina] = 1 ; edge[c][inb] = 1 ;
             31         A[c] = ina ; B[c] = inb ;
             32     }
             33 }
             34 
             35 int Binmatch( int inn, int inm, int link[][size] )
             36 {//傳入邊的矩陣edge[][]-->link[][]
             37     int matchnum = 0 ; int dn_node ;
             38     int queue[size*10] ; int head=0, tail = 0 ;//定義隊列
             39     int upmatch[size], dnmatch[size] ; int prev[size] ;
             40     memset( upmatch, -1sizeof(upmatch) ) ;
             41     memset( dnmatch, -1sizeof(dnmatch) ) ;
             42 
             43     forint i=1; i<=inn; i++ ) {
             44         forint j=1; j<=inm; j++ )    prev[j] = -2 ;
             45         head = tail = 0 ;
             46 
             47         forint j=1; j<=inm; j++ )    if( link[i][j] )
             48         { prev[j] = -1 ; queue[tail++= j ; }
             49 
             50         while( head < tail ) {
             51             dn_node = queue[head] ;
             52             if-1 == dnmatch[dn_node] )    break ;
             53             head++ ;
             54             forint j=1; j<=inm; j++ ) if-2==prev[j]&&link[dnmatch[dn_node]][j] )
             55             { prev[j] = dn_node ; queue[tail++= j ; }
             56         }
             57 
             58         if( head == tail )    continue ;
             59         while( prev[dn_node] > -1 ) {
             60             upmatch[dnmatch[prev[dn_node]]] = dn_node ;
             61             dnmatch[dn_node] = dnmatch[prev[dn_node]] ;
             62             dn_node = prev[dn_node] ;
             63         }
             64 
             65         dnmatch[dn_node] = i ; upmatch[i] = dn_node ;
             66         matchnum++ ;
             67     }
             68 
             69     if( matchnum != row )    printf( "NO\n" ) ;
             70     else
             71     {
             72         char * blank = "" ;
             73         forint i=1; i<=col; i++ )
             74         {
             75             if( upmatch[i] != -1 )
             76             {
             77                 printf( "%s%d", blank, upmatch[i] ) ;
             78                 blank = " " ;
             79             }
             80             else
             81             {
             82                 printf( "%s%d", blank, A[i] ) ;
             83                 blank = " " ;
             84             }
             85         }
             86         printf( "\n" ) ;
             87     }
             88 
             89     return matchnum ;
             90 }
             91 
             92 void process()
             93 {
             94     int matchnum = Binmatch( col, row, edge ) ;
             95 
             96     //printf( "matchnum == %d\n", matchnum ) ;
             97 }
             98 
             99 int main()
            100 {
            101     while( scanf( "%d"&innum ) != EOF )
            102     {
            103         forint ct=1; ct<=innum; ct++ )
            104         {
            105             input() ;
            106 
            107             process() ;
            108 
            109             //output() ;
            110         }
            111     }
            112 
            113     return 0 ;
            114 }
            办公室久久精品| 精品久久久无码人妻中文字幕豆芽| 久久久久亚洲av无码专区喷水| 久久久久无码精品国产不卡| 囯产极品美女高潮无套久久久 | 狠狠色婷婷综合天天久久丁香 | 精品久久无码中文字幕| 国产综合精品久久亚洲| 日本五月天婷久久网站| 久久久无码一区二区三区| 国产精品成人99久久久久 | 国产亚洲精品美女久久久| 久久久久国产精品麻豆AR影院 | 色综合合久久天天综合绕视看| 青春久久| 国产99久久久国产精品~~牛| 波多野结衣久久一区二区 | 亚洲中文字幕久久精品无码APP | 久久91精品国产91久久户| 欧美亚洲国产精品久久久久| 久久精品国产亚洲麻豆| 亚洲欧美日韩中文久久| 久久夜色精品国产亚洲av| 97久久天天综合色天天综合色hd| 久久久WWW成人免费毛片| 精品综合久久久久久97超人| 麻豆亚洲AV永久无码精品久久| 一本大道久久东京热无码AV| 久久www免费人成看国产片| 日本免费一区二区久久人人澡| 欧美精品久久久久久久自慰| 精品国产乱码久久久久久人妻 | 久久久久人妻一区精品色| 国产精品久久久久久久久软件| 久久午夜综合久久| 久久久久国产一区二区| 久久精品夜色噜噜亚洲A∨ | 亚洲熟妇无码另类久久久| 久久精品一本到99热免费| 日韩欧美亚洲综合久久| 中文字幕日本人妻久久久免费 |