zoukankan      html  css  js  c++  java
  • POJ 1087

    #include<iostream>
    #include<stdio.h>
    #include<string>
    #define MAXN 105
    using namespace std;
    struct unix
    {
        string s1;
        string s2;
    };
    bool ck[MAXN];                        
    int _m[MAXN][MAXN];
    int match[MAXN];
    string rec[MAXN];
    unix dev[MAXN];
    unix adap[MAXN];
    bool mark_adap[MAXN];
    int hungary(int a,int b);
    int a;
    int b;
    int c;
    
    void For_adap(int i);
    void make_map();
    int main()
    {
        //freopen("acm.acm","r",stdin);
        int i;
        int j;
        int u;
        int v;
        int edge;
        cin>>a;
        for(i = 0; i < a; ++ i)
        {
            cin>>rec[i];
        }
        cin>>b;
        for(i = 0; i < b; ++ i)
        {
            cin>>dev[i].s1;
            cin>>dev[i].s2;
        }
        cin>>c;
        for(i = 0; i < c; ++ i)
        {
            cin>>adap[i].s1;
            cin>>adap[i].s2;
        }
        memset(_m,0,sizeof(_m));
        make_map();
        //for(i = 0; i < b; ++ i)
        //{
        //    for(j = 0; j < a; ++ j)
        //.    {
        //        if(_m[i][j] == 1)
        //            cout<<dev[i].s1<<"---->"<<rec[j]<<endl;
        //    }
        //}
        cout<<b-hungary(b,a)<<endl;
    }
    
    void make_map()
    {
        int i;
        int j;
        for(i = 0; i < b; ++ i)
        {
            memset(mark_adap,false,sizeof(mark_adap));
            for(j = 0; j < a; ++ j)
            {
                if(dev[i].s2 == rec[j])
                    _m[i][j] = 1;
            }
            For_adap(i);
        }
    }
    
    void For_adap(int i)
    {
        int j;
        int k;
        string tem;
        for(j = 0; j < c; ++ j)
        {
            if(dev[i].s2 == adap[j].s1 && !mark_adap[j])
            {
                mark_adap[j] = true;
                for(k = 0; k < a; ++ k)
                {
                    if(rec[k] == adap[j].s2)
                    {
                        _m[i][k] = 1;
                    }
                }
                tem = dev[i].s2;
                dev[i].s2 = adap[j].s2;
                For_adap(i);
                dev[i].s2 = tem;
            }
        }
    }
    
    ///////////////////////////////////////////////////
    //hungary—by myself
    ///////////////////////////////////////////////////
    bool search(int a,int b,int x)
    { 
        int i;
        int t;
        for ( i = 0 ; i < b ; i++)            
            if (_m[x][i] && ! ck[i])            
            {
                ck[i] = true;                    
                t = match[i];                
                match[i] = x;                    
                if (t == -1 || search(a,b,t))   
                    return true;            
                match[i] = t;                
            }      
        return false;
    }
     
    int hungary(int a,int b)
    {
        memset(match,-1,sizeof(match));
        int max_match = 0;
        int i;
        for ( i = 0 ; i < a ; i++)
        {
            memset(ck,false,sizeof(ck));    
            if (search(a,b,i)) max_match++;        
        }    
        return max_match;
    }

    关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。 

    技术网站地址: vmfor.com

  • 相关阅读:
    新概念第二册(1)--英语口语听力课1
    外企面试课程(一)---熟悉常见的缩略词
    公司 邮件 翻译 培训 长难句 结课
    workflow
    公司 邮件 翻译 培训 长难句 20
    公司 邮件 翻译 培训 长难句 19
    Engineering Management
    公司 邮件 翻译 培训 长难句 18
    公司 邮件 翻译 培训 长难句 17
    第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头
  • 原文地址:https://www.cnblogs.com/gavinsp/p/4563265.html
Copyright © 2011-2022 走看看