• <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 }
            亚洲&#228;v永久无码精品天堂久久| 久久久久久亚洲Av无码精品专口| 国产精品久久久久乳精品爆| 国产亚洲成人久久| 99热热久久这里只有精品68| 亚洲国产精品人久久| 国产亚洲精久久久久久无码AV| 久久亚洲国产欧洲精品一| 精品午夜久久福利大片| 久久天堂AV综合合色蜜桃网 | 精品久久国产一区二区三区香蕉 | 久久久久久久久无码精品亚洲日韩 | 国产精品欧美久久久久无广告 | 久久久精品日本一区二区三区 | 2021久久精品免费观看| 91超碰碰碰碰久久久久久综合| 精品熟女少妇AV免费久久| 久久婷婷色综合一区二区| 欧美亚洲国产精品久久蜜芽| 久久天天躁狠狠躁夜夜网站| 久久国产AVJUST麻豆| 无码国内精品久久人妻麻豆按摩| 好久久免费视频高清| 久久精品国产亚洲精品2020| 午夜不卡久久精品无码免费| 久久久国产打桩机| 久久精品国产99国产精品亚洲| 亚洲伊人久久综合影院| 久久天天躁狠狠躁夜夜2020| 精品久久久久久久中文字幕| 久久久久国产精品| 香蕉久久一区二区不卡无毒影院| 国产成人久久精品区一区二区| 久久偷看各类wc女厕嘘嘘| 久久婷婷国产综合精品| 国内精品久久久久影院日本| 国产精品久久久久久吹潮| a高清免费毛片久久| 91久久九九无码成人网站| 国产精品永久久久久久久久久| 国产成人无码精品久久久久免费|