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

  • 相关阅读:
    HDOJ2066 一个人的旅行 floyd
    手动添加数据源时DataGridViewComboBoxCell值出问题解决方法
    可伸缩的Form窗体!
    SharpMap项目Web控件学习!
    MVC和MVP的初步理解
    ArcEngine编辑功能(五)
    胡言乱语:实体具有继承关系的空间数据库设计方法?
    WinForm单例窗体的实现
    4. 模板模式和建造者模式
    Oracle笔记(0):在Win2008系统上安装Oracle11g实践
  • 原文地址:https://www.cnblogs.com/gavinsp/p/4563265.html
Copyright © 2011-2022 走看看