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

            我希望你是我獨家記憶

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

            P1719

            Posted on 2008-09-10 21:14 Hero 閱讀(117) 評論(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综合网成人 | 国内精品久久久久久久涩爱| 久久影院午夜理论片无码| 亚洲精品无码久久久久sm| 97久久精品人妻人人搡人人玩| 久久精品国产99久久久香蕉| 久久久精品国产免大香伊 | 97久久国产亚洲精品超碰热 | 久久久久久国产精品免费无码| 国产高潮国产高潮久久久91| 777午夜精品久久av蜜臀| 国产亚洲成人久久| 久久精品国产第一区二区三区 | 精品熟女少妇a∨免费久久| 国产日韩欧美久久| 久久综合国产乱子伦精品免费| 国产免费福利体检区久久| 国产∨亚洲V天堂无码久久久| 免费精品国产日韩热久久| 情人伊人久久综合亚洲| 久久ww精品w免费人成| 99久久香蕉国产线看观香| 精品久久人人做人人爽综合| 99久久免费国产精精品| 色欲综合久久躁天天躁蜜桃| 中文国产成人精品久久亚洲精品AⅤ无码精品| 97精品伊人久久大香线蕉app| 亚洲午夜久久久影院| 伊人久久大香线蕉综合Av | 精品多毛少妇人妻AV免费久久| 99久久免费只有精品国产| 99久久精品午夜一区二区| 色综合久久久久综合体桃花网 | 久久青青草原精品影院| 99久久久精品免费观看国产| 亚洲AV无码久久精品狠狠爱浪潮| 伊人色综合久久天天人守人婷 |