• poj_2584,多重二分匹配


    http://poj.org/problem?id=2584

    原理和普通二分匹配一样

    多重二分匹配也可以像普通二分匹配那样,通过拆点建图用最大流来解

    作为自己的模板吧

    #include<cstdio>
    #include<cstring>
    
    int g[30][30];
    int smlxt[30];
    char s[15];
    int n;
    int link[30][30], vlink[30], vis[30];
    
    int f(char c){
        if(c == 'S') return 1;
        if(c == 'M') return 2;
        if(c == 'L') return 3;
        if(c == 'X') return 4;
        if(c == 'T') return 5;
    }
    int dfs(int u){
        for(int i = 1; i <= 5; i ++){
            if(g[u][i] && !vis[i]){
                vis[i] = 1;
                if(vlink[i] < smlxt[i]){
                    link[i][vlink[i]++] = u;
                    return 1;
                }
                for(int j = 0; j < smlxt[i]; j ++){
                    if(dfs(link[i][j])){
                        link[i][j] = u;
                        return 1;
                    }
                }
            }
        }
        return 0;
    }
    void solve(){
        int ans = 0;
        memset(vlink, 0, sizeof vlink);
        for(int i = 1; i <= n; i ++){
            memset(vis, 0, sizeof vis);
            ans += dfs(i);
        }
        if(ans == n)
          puts("T-shirts rock!");
        else
          puts("I'd rather not wear a shirt anyway...");
    }
    int main(){
        while(scanf("%s", s)){
            if(strcmp(s, "ENDOFINPUT") == 0) break;
            scanf("%d", &n);
            memset(g, 0, sizeof g);
            for(int i = 1; i <= n; i ++){
                scanf("%s", s);
                int v1 = f(s[0]), v2 = f(s[1]);
                for(int j = v1; j <= v2; j ++)
                  g[i][j] = 1;
            }
            for(int i = 1; i <= 5; i ++) scanf("%d", smlxt+i);
            scanf("%s", s);
            solve();
        }
        return 0;
    }
  • 相关阅读:
    JavaScript 循环语句
    python 学习(day1)
    spring定时任务(@Scheduled注解)cron表达式详解
    IDEA 实用插件
    mysql版本和mysql-connector-java的对应关系记录
    CAS单点登录(理论部分)
    AOP
    获取post请求数据工具类
    nodeJs 安装
    docker 安装Nginx
  • 原文地址:https://www.cnblogs.com/louzhang/p/2667740.html
Copyright © 2020-2023  润新知