zoukankan      html  css  js  c++  java
  • 小白菜OJ 1122 公牛母牛配(最大二分图匹配模板)

     题意:

    n只公牛和m只母牛,
    某些公牛和某些母牛互相喜欢。
    但最后一只公牛只能和一只母牛建立一对一匹配。
    要使得最后牛群匹配对数最大。

    链接:

    http://caioj.cn/problem.php?id=1122

    #include <bits/stdc++.h>
    using namespace std;
    const int maxN = 1e5 + 7;
    vector<int> G[maxN];
    int match[maxN];
    int vis[maxN];
    int n, m, sum;
    int dfs(int u) {
    
        for(int i = 0; i < G[u].size(); i++) {
            int v = G[u][i];
            //有路而且没被访问
            if(!vis[v]) {
                vis[v] = 1;//标记点i已经访问过
    
                //如果点i未被配对或者找到了新的配对
                if(match[v] == 0 || dfs(match[v])) {
                    //更新配对关系
                    match[v] = u;
                    match[u] = v;
                    return 1;
                }
            }
        }
        return 0;
    }
    
    int main() {
    //    freopen("1.txt","r", stdin);
        scanf("%d %*d %d", &n, &m);
        for(int i = 0; i < m; i++) {
            int u, v;
            scanf("%d %d", &u, &v);
            v += 10000;
            G[u].push_back(v);
            G[v].push_back(u);
        }
    
        memset(match, 0 , sizeof(match));
    
        for(int i = 1; i <= n; i++){
            memset(vis, 0, sizeof(vis));
            if(dfs(i)) {
                sum++;
            }
        }
        printf("%d
    ", sum);
    
    
    }
  • 相关阅读:
    进程空间与系统空间(一)
    内核之最
    Linux 内核3.10.5 专场
    device_create与device_register
    重写与重载的含义
    抽象类和接口的区别
    Spring知识点
    mybatis学习
    知识点
    Mybatis面试题
  • 原文地址:https://www.cnblogs.com/Jadon97/p/9410598.html
Copyright © 2011-2022 走看看