• <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 - 20,  comments - 13,  trackbacks - 0

            解決問題:
            N個男的和M個女的,已知道每個男的只能接受哪些女的,求最多能夠匹配多少對情侶?

            思路:
            1.只要求出有多少個男的找到對象即可。
            2.遍歷所有男的,對于每個男的做以下處理(3~5),最后進入6
            3.隨便找一個他能夠接受的女的,判斷這個女的是否被“挑選”過了,沒挑選過的則設置為挑選并進入4,否則繼續找下一個女的,找遍所有都是挑選過的則進入5
            4.判斷這個女的是否有男朋友了,沒有就直接和上述的男的進行匹配,如果有的話(假設她的男朋友是A),則對A進行3的操作,如果該操作返回的是真,則說明這個女的可以和男的匹配,而A和另外的人匹配。返回真。
            5.返回假
            6.如果該男的找到女的,則最大匹配數+1.

            沒說清楚,配合代碼吧,很簡單的一個模板。

            #include <stdio.h>
            #include 
            <string.h>

            int n,m;
            int sum;
            int p[201];
            int b[201];
            int map[201][201];

            bool path(int cow)
            {
                
            int i;
                
            for(i=1;i<=m;i++)
                
            {
                    
            if(b[i]==0 && map[cow][i] == 1)
                    
            {
                        b[i] 
            = 1;
                        
            if(p[i]==0  || path(p[i]))
                        
            {
                            p[i]
            =cow;
                            
            return true;
                        }

                    }

                }

                
            return false;
            }


            int main()
            {
                
            int i,j;
                
            while(scanf("%d%d",&n,&m)!=EOF)
                
            {
                    sum
            =0;
                    memset(map,
            0,sizeof(map));
                    memset(p,
            0,sizeof(p));
                    
            for(i=1;i<=n;i++)
                    
            {
                        
            int a,b;
                        scanf(
            "%d",&a);
                        
            for(j=1;j<=a;j++)
                        
            {
                            scanf(
            "%d",&b);
                            map[i][b] 
            = 1;
                        }

                    }

                    
            for(i=1;i<=n;i++)
                    
            {
                        memset(b,
            0,sizeof(b));
                        
            if(path(i))
                            sum
            ++;
                    }

                    printf(
            "%d\n",sum);
                }

                
            return 0;
            }


            下面嘗試用鄰接表來解決類似的題目,但是如果不釋放內存的話,會MLE,而通過free釋放內存又會出現TLE錯誤,太囧了。。。良智說用STL的vector應該可以處理這個問題,回頭再用vector,今天先發free的做法,雖然過不了~~

             

            #include <stdio.h>
            #include 
            <string.h>
            #include 
            <stdlib.h>

            struct edge{
                
            int to;
                edge
            * next;
            };

            edge list[
            101];

            int p,n;
            int par[301];
            int b[301];
            struct edge* temp;
            struct edge* e;

            bool path(int person)
            {
                
            struct edge* e = list[person].next;
                
            while(e)
                {
                    
            if(b[e->to]==0)
                    {
                        b[e
            ->to] = 1;
                        
            if(par[e->to]==0 || path(par[e->to]))
                        {
                            par[e
            ->to]=person;
                        
            //    printf("%d__%d\n",e->to,par[e->to]);
                            return true;
                        }
                    }
                    e 
            = e->next;
                }
                
            return false;
            }

            int main()
            {
                
            int i,j;
                
            int a,t2;
                
            int t;
                
            while(scanf("%d",&t)!=EOF)
                {
                    
            while(t--)
                    {
                        scanf(
            "%d%d",&p,&n);
                        {
                            
            int ans = 0;
                            
            //memset(map,0,sizeof(map));
                            memset(par,0,sizeof(par));
                            
            for(i=1;i<=p;i++)
                            {
                                scanf(
            "%d",&a);
                                
            //list[i] = (struct edge*)malloc(sizeof(edge));
                                struct edge* head = (&list[i]);
                                e 
            = head;
                                
            while(a--)
                                {
                                    scanf(
            "%d",&t2);
                                    temp 
            = (struct edge*)malloc(sizeof(edge));
                                    temp
            ->to = t2;
                                    e
            ->next = temp;
                                    e 
            = temp;
                                }
                                e
            ->next = NULL;
                                e 
            = head;
                                
            /*
                                while(e)
                                {
                                    printf("%d__%d\n",e->from,e->to);
                                    e=e->next;
                                }
            */
                            }

                            
            for(i=1;i<=p;i++)
                            {
                                memset(b,
            0,sizeof(b));
                                
            if(path(i))
                                {
                                    ans
            ++;
                                }
                                
            else
                                {
                                    printf(
            "NO\n");
                                    
            break;
                                }
                            }
                            
            if(ans==p)
                                printf(
            "YES\n");
                            
            for(i=1;i<=p;i++)
                            {
                                e 
            = list[i].next;
                                
            while(e)
                                {
                                    temp 
            = e;
                                    e
            =e->next;
                                    free(temp);
                                }
                            }
                        }
                    }
                }
                
            return 0;
            }

            posted on 2010-05-16 00:56 ACong 閱讀(191) 評論(0)  編輯 收藏 引用

            <2010年5月>
            2526272829301
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            常用鏈接

            留言簿

            隨筆檔案

            文章檔案

            廣商豪杰

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            99久久综合国产精品二区| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久亚洲中文字幕精品一区四 | 久久国产精品77777| 久久九九久精品国产| 精品久久无码中文字幕| 香蕉99久久国产综合精品宅男自 | 囯产精品久久久久久久久蜜桃| 2020最新久久久视精品爱| 久久免费的精品国产V∧| av无码久久久久不卡免费网站| 国产成人无码精品久久久免费 | 欧美精品乱码99久久蜜桃| 久久久精品波多野结衣| 香蕉久久夜色精品升级完成| 久久精品国产久精国产一老狼| 亚洲国产天堂久久久久久| 久久这里只有精品视频99| 欧美精品久久久久久久自慰| 亚洲国产精品久久电影欧美| 久久精品国产WWW456C0M| 国产91色综合久久免费| 久久99国产精品99久久| 91久久成人免费| 99久久国语露脸精品国产| 无码超乳爆乳中文字幕久久| 午夜精品久久久久9999高清| 国产毛片久久久久久国产毛片| 99久久中文字幕| 久久av无码专区亚洲av桃花岛| 久久综合亚洲色HEZYO社区| 久久国产高清一区二区三区| 天天影视色香欲综合久久| 99久久国产亚洲高清观看2024| 国产精品久久久久AV福利动漫| 久久亚洲欧美国产精品 | 国产精品久久久久久五月尺| 亚洲精品97久久中文字幕无码| 久久国产美女免费观看精品| 精品无码久久久久久久久久 | 九九久久自然熟的香蕉图片|