• <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 閱讀(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 }
            中文字幕无码免费久久| 国产欧美久久久精品| 久久久久无码中| 亚洲国产精品无码久久久秋霞2| 欧美一区二区三区久久综| 狠狠色婷婷综合天天久久丁香| 久久精品国产黑森林| 国色天香久久久久久久小说 | 99久久99久久| 久久伊人色| 久久综合丁香激情久久| 久久久久亚洲精品日久生情| 久久久国产精品网站| 少妇内射兰兰久久| 亚洲国产成人久久一区久久| 国产欧美久久一区二区| 伊人久久精品无码二区麻豆| 久久久久香蕉视频| 亚洲嫩草影院久久精品| 久久午夜无码鲁丝片| 久久久久久久精品成人热色戒| 久久久WWW成人免费毛片| 蜜桃麻豆www久久| 国产精品久久国产精麻豆99网站| 久久精品国产男包| 一级a性色生活片久久无少妇一级婬片免费放 | 国产午夜久久影院| 久久无码高潮喷水| 伊人色综合久久天天网| 久久国产精品无码网站| 国产女人aaa级久久久级| 91秦先生久久久久久久| 国产精品熟女福利久久AV| 亚洲国产精品久久久久网站| 精品综合久久久久久97超人| 99国产精品久久| 丁香久久婷婷国产午夜视频| 国产午夜精品久久久久九九电影| 久久成人精品| 99久久国产综合精品女同图片| 97久久婷婷五月综合色d啪蜜芽|