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

            The Way of C++

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              55 Posts :: 0 Stories :: 19 Comments :: 0 Trackbacks

            公告

            The first time i use this blog, i will write something that i learn which i think is worth write down.

            常用鏈接

            留言簿(3)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

               Bipartite graph is the graph which include two sets(name X,and Y) and every edge in the graph has the rule that one point is in X,the other is in  Y. The mostly problem is finding the Maximum Bipartite Matching, which mean find the maximum edges in the case of keeping  the points of the edges only connecting to one edge. The other problem is the perfect matching, which means that all the vector of the graph is included in the match edges. And the solution to find the minimum number of vectors ( either in X and Y) making every edge connecting to these vectors is called the minimum coverage . Usually, we have the equation that " minimum coverage number = maximum bipartite matching". There is another problem called maximum independent set problem. This problem request to find the maximum number of M(the number of vector) which there are no edges connect to in the graph that contain N vectors. This problem can be transformed into the maximum bipartite matching problem if the conditions can be satisfied. And we have the result that " the maximum independent set vector number M= N- Maximum bipartite matching number ".
               One way to solve the maximum bipartite matching problem is the method which is called Hungary Algorithm. There are many problems in the POJ which can be solved by Hungary Algorithm as long as it's a maximum tipartite mathcing or can be transformed into.  As an example ,you can view the problem discription in the link  . The following is my code. (link:  http://acm.pku.edu.cn/JudgeOnline/problem?id=1325)
                Plz forgive my poor written English, but everyone improve it by making mistake and attempting ,right? -_-

             1
             2#include<stdio.h>
             3#include<string.h>
             4#include<iostream>
             5using namespace std;
             6const int MAX= 110;
             7int u,v,k;//u:the left node number,v:the right node number
             8bool c[MAX][MAX];//c[i][j] indicate that i of left connect to the j of right, begin with 0
             9
            10int um[MAX],vm[MAX];//um[i] indicate the j of the right that connect to i, they are matched . so is vm[j]
            11bool s[MAX];//s[j] check whether j of the right has been used in one round of finding the path
            12
            13bool Find(int u){
            14    int j;
            15    for(j=1;j<v;j++){
            16        if(c[u][j]&&!s[j]){
            17            s[j]=true;
            18            if(!vm[j]||Find(vm[j])){
            19                um[u]=j;
            20                vm[j]=u;
            21                return true;
            22            }
            23        }
            24    }
            25    return false;
            26}
            27                
            28
            29int Match(){
            30    memset(um,0,sizeof(um));
            31    memset(vm,0,sizeof(vm));
            32    int ret=0;
            33    int i;
            34    for(i=1;i<u;i++)
            35        if(!um[i]){
            36            memset(s,false,sizeof(s));
            37            if(Find(i))
            38                ret++;
            39        }
            40    
            41    return ret;
            42}
            43
            44
            45int main(){
            46    
            47    while(scanf("%d%d%d",&u,&v,&k)&&u){
            48        memset(c,0,sizeof(c));
            49        int i,a,b,d;
            50        for(i=0;i<k;i++){
            51            scanf("%d%d%d",&a,&b,&d);
            52            if(b&&d)
            53                c[b][d]=1;
            54        }
            55        printf("%d\n",Match());
            56    }
            57    return 1;
            58}


               

            posted on 2007-12-21 14:53 koson 閱讀(2225) 評論(2)  編輯 收藏 引用 所屬分類: DataStruct And Algorithm

            Feedback

            # re: Maximum Bipartite Matching 2007-12-21 18:22 winsty
            好標準的匈牙利
            贊一個!  回復  更多評論
              

            # re: Maximum Bipartite Matching 2007-12-22 11:51 在線軟件
            不錯..
            但是我不是很懂啊  回復  更多評論
              

            国内精品久久久久久久亚洲 | 人人狠狠综合88综合久久| 国产精品久久自在自线观看| 品成人欧美大片久久国产欧美...| 精品国产91久久久久久久a| 久久天天躁狠狠躁夜夜2020一| 久久久久久久久无码精品亚洲日韩| 亚洲一区二区三区日本久久九| 久久天天躁狠狠躁夜夜不卡| 国产毛片久久久久久国产毛片| 久久精品国产99国产精品导航| 亚洲成色999久久网站| 久久久国产精品亚洲一区| 性高朝久久久久久久久久| 国产高潮国产高潮久久久91| 国内精品久久久久影院日本 | 久久久午夜精品| 99久久精品免费国产大片| 国产精品久久久久9999| 亚洲AV无码久久寂寞少妇| 亚洲精品综合久久| 性高湖久久久久久久久AAAAA| 日本一区精品久久久久影院| 久久久久人妻精品一区| 久久精品国产2020| 亚洲色婷婷综合久久| 欧美黑人激情性久久| 亚洲国产精品无码久久久不卡| 久久精品中文字幕大胸| 伊人久久大香线蕉精品不卡| 久久久久久噜噜精品免费直播| 久久精品国产福利国产琪琪| 久久国产精品二国产精品| 精品久久久久久无码中文野结衣 | 久久综合精品国产二区无码| 欧美日韩精品久久免费| 精品熟女少妇aⅴ免费久久| 99久久人人爽亚洲精品美女| 久久se精品一区精品二区国产 | 日本久久久久久中文字幕| 中文字幕成人精品久久不卡|