• XidianOJ 1048 二分图匹配模板


    题目描述

    西电ACM实验室是一个很和谐的实验室,有n个男生和m个女生组成(m>0),尽管表面大家都全心全意地为了荣誉而战,然而经过亮亮的深入调查,我们已经知道了有一些人三心二意:每天只有99%的时间花费在切题上,而还有1%的时间在想着某位或某几位异性!作为FFF团西电分部的部长,亮亮显然不能容许这种朝三暮四的情况。但是西电ACM实验室又是一个很开明的实验室,于是亮亮决定尽可能的撮合实验室的队员!

    那么问题来了,亮亮最多能撮合多少对呢?

    输入

    多组数据,每组数据首先是两个整数,n,m表示男女生的人数(0<n,m<=500).

    接下来是一个整数l(0<=l<=200000)表示亮亮搜集得到的关系

    接下来是l行,每行是两个数u,v(0<=u<n,0<=v<m)

    表示第u位男生和第v位女生有情况!

    由于ACM实验室是个和谐的大家庭,因此不会出现同性恋。

    输出

    对于每组数据,输出一个整数,表示亮亮能撮合的对数。

    --正文

    二分图匹配模板

    用匈牙利算法解决

    话说给的样例有错吧,明明u<n的给个2。。

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int n,m;
    
    int love[501][501]; // boy in the front 
    int match[501];
    bool visit[501];
    bool dfs(int u){
        int i;
        for (i=0;i<m;i++){
            if (love[u][i] && !visit[i]){
                visit[i] = true;
                if (match[i] == -1 || dfs(match[i])){
                    match[i] = u;
                    return true;
                }
            }
            
        }
        return false;
    }
    
    int main(){
        while (scanf("%d %d",&n,&m) != EOF){
            int l;
            scanf("%d",&l);
            int i,j;
            memset(love,0,sizeof(love));
            for (i=0;i<501;i++){
                match[i] = -1;
            }
            
            for (i=1;i<=l;i++){
                int u,v;
                scanf("%d %d",&u,&v);
                love[u][v] = 1;
            }
            int ans = 0;
            for (i=0;i<n;i++){
                memset(visit,false,sizeof(visit));
                if (dfs(i)) ans ++;
            }
            printf("%d
    ",ans);
        }    
        return 0;
    }
  • 相关阅读:
    springBoot启动异常 Failed to load ApplicationContext
    mysql存储过程
    springBoot集成Swagger
    groupmems命令:更改和查看组成员 和 usermod命令修改组
    javaBean简介
    Angular获取dom元素,以及父子组建之间相互传值
    Lambda表达式
    坐标转换
    扩展方法
    Binding的Path(路径)
  • 原文地址:https://www.cnblogs.com/ToTOrz/p/6082748.html
Copyright © 2020-2023  润新知