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

            ZJU--2039--二部圖

            Posted on 2008-08-01 21:21 Hero 閱讀(132) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 代碼如詩(shī)--ACM
            /* Accepted 2039 C++ 00:00.02 416K */
            //還是二部圖

            #include 
            <stdio.h>
            #include 
            <stdlib.h>
            #include 
            <string.h>
            #include 
            <ctype.h>
            #include 
            <math.h>
            #define llong unsigned long long 
            #define unint unsigned int
            #define printline  printf( "\n" ) 

            const int INF = 1000000 ;
            const int size = 110 ;

            struct NODE {
                
            int x ;
                
            int y ;
            };
            struct NODE pnode[size] ;
            struct NODE dnode[size] ;

            int testnum, ct ;
            int inp, ind ;
            bool link[size][size] ;

            int Binmatch( int inn, int inm )
            {
                
            int matchnum = 0 ; int dn_node ;
                
            int queue[size*10] ; int head=0, tail = 0 ;//定義隊(duì)列
                int upmatch[size], dnmatch[size] ; int prev[size] ;
                memset( upmatch, 
            -1sizeof(upmatch) ) ;
                memset( dnmatch, 
            -1sizeof(dnmatch) ) ;

                
            forint i=1; i<=inn; i++ ) {
                    
            forint j=1; j<=inm; j++ )    prev[j] = -2 ;
                    head 
            = tail = 0 ;

                    
            forint j=1; j<=inm; j++ )    if( link[i][j] )
                    { prev[j] 
            = -1 ; queue[tail++= j ; }

                    
            while( head < tail ) {
                        dn_node 
            = queue[head] ;
                        
            if-1 == dnmatch[dn_node] )    break ;
                        head
            ++ ;
                        
            forint j=1; j<=inm; j++ ) if-2==prev[j]&&link[dnmatch[dn_node]][j] )
                        { prev[j] 
            = dn_node ; queue[tail++= j ; }
                    }

                    
            if( head == tail )    continue ;
                    
            while( prev[dn_node] > -1 ) {
                        upmatch[dnmatch[prev[dn_node]]] 
            = dn_node ;
                        dnmatch[dn_node] 
            = dnmatch[prev[dn_node]] ;
                        dn_node 
            = prev[dn_node] ;
                    }

                    dnmatch[dn_node] 
            = i ; upmatch[i] = dn_node ;
                    matchnum
            ++ ;
                }

                printf( 
            "%d\n", matchnum+inp ) ;
                
                
            forint i=1; i<inp; i++ ) {

                    printf( 
            "%d %d ", pnode[i].x, pnode[i].y ) ;
                    
            if( upmatch[i] != -1 ) 
                        printf( 
            "%d %d ", dnode[upmatch[i]].x, dnode[upmatch[i]].y ) ;
                }
                printf( 
            "%d %d\n",pnode[inp].x, pnode[inp].y ) ;

                
            return matchnum ;
            }

            double fdist( int x1, int y1, int x2, int y2 )
            {
                
            return sqrt( 1.0*(x1-x2)*(x1-x2) + 1.0*(y1-y2)*(y1-y2) ) ;
            }

            int main()
            {
                
            //freopen( "frac1.in", "r", stdin ) ;
                
            //freopen( "frac1.out","w",stdout ) ;

                
            while( scanf( "%d",&testnum ) != EOF )
                
            //scanf( "%d",&testnum ) ;
                {
                    
            forint ct=1; ct<=testnum; ct++ )
                    {
                        memset( link, 
            falsesizeof(link) ) ;
                        scanf( 
            "%d %d",&inp, &ind ) ;

                        
            forint i=1; i<=inp; i++ )
                            scanf( 
            "%d %d",&pnode[i].x, &pnode[i].y ) ;

                        
            forint i=1; i<=ind; i++ )
                            scanf( 
            "%d %d",&dnode[i].x, &dnode[i].y ) ;

                        
            forint i=1; i<inp; i++ ) {
                            
            double plen = fdist( pnode[i].x, pnode[i].y, pnode[i+1].x, pnode[i+1].y ) ;
                            
            forint j=1; j<=ind; j++ ) {
                                
            double dlen = fdist( pnode[i].x, pnode[i].y, dnode[j].x, dnode[j].y ) +
                                           fdist( pnode[i
            +1].x, pnode[i+1].y, dnode[j].x, dnode[j].y ) ;
                                
            if2*plen - dlen >= 0 )    link[i][j] = true ;
                            }
                        }
            //構(gòu)造二部圖的link[][]

                        
            int matchnum = Binmatch( inp-1, ind ) ;

                        
            if( testnum != ct )    printf( "\n" ) ;
                    }
                }
            //while

                
            return 0 ;
            }
            麻豆亚洲AV永久无码精品久久| 国产高清国内精品福利99久久| 久久久久久青草大香综合精品| 国产精品久久国产精麻豆99网站| 少妇久久久久久被弄高潮| 久久久久国产精品人妻| 麻豆av久久av盛宴av| 久久久久se色偷偷亚洲精品av| 伊人色综合久久天天网| 性做久久久久久久久| 性欧美大战久久久久久久| 亚洲国产高清精品线久久 | 色综合久久夜色精品国产| 亚洲а∨天堂久久精品9966| 亚洲国产小视频精品久久久三级| 欧美一区二区久久精品| 久久久久亚洲av综合波多野结衣| 精品国产乱码久久久久久人妻 | 久久精品国产亚洲av水果派| 久久亚洲私人国产精品| 国产三级久久久精品麻豆三级 | 中文成人久久久久影院免费观看| 亚洲国产成人精品无码久久久久久综合 | 污污内射久久一区二区欧美日韩 | 久久久中文字幕日本| 无码任你躁久久久久久久| 亚洲αv久久久噜噜噜噜噜| 国内精品久久久久影院优 | 精品综合久久久久久97| 国内精品久久久久久久97牛牛| 99精品久久久久久久婷婷| 亚洲日本久久久午夜精品| 久久精品a亚洲国产v高清不卡| 国产午夜精品久久久久九九| 国产精品久久久久久久久软件 | 开心久久婷婷综合中文字幕| 久久久无码一区二区三区 | 久久久亚洲欧洲日产国码是AV| 久久精品国产精品亚洲毛片| 欧美午夜A∨大片久久| 乱亲女H秽乱长久久久|