zoukankan      html  css  js  c++  java
  • bzoj1191 [ HNOI2006 ] --匈牙利算法

    这道题一看就是求二分图最大匹配,不过需要注意的是答案需要前面所有题目都能答对,因为这里WA了无数次......

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int tot,a[3001][2],i,j,n,m,k,f[3001],x,y;
    bool b[3001],flag=0;
    bool dfs(int x){
        b[x]=1;
        if(!f[a[x][0]]){
            f[a[x][0]]=x;
            return 1;
        }
        if(!b[f[a[x][0]]]&&dfs(f[a[x][0]])){
            f[a[x][0]]=x;
            return 1;
        }
        if(!f[a[x][1]]){
            f[a[x][1]]=x;
            return 1;
        }
        if(!b[f[a[x][1]]]&&dfs(f[a[x][1]])){
            f[a[x][1]]=x;
            return 1;
        }
        return 0;
    }
    int main()
    {
        scanf("%d%d",&m,&n);
        for(i=1;i<=n;++i)scanf("%d%d",&a[i][0],&a[i][1]);
        for(i=1;i<=n;++i){
            memset(b,0,sizeof(b));
            if(!dfs(i)){
                flag=1;
                break;
            }
        }
        printf("%d
    ",!flag?n:(i-1));
        return 0;
    }
  • 相关阅读:
    求数组元素出现的次数
    数组的一些内置方法
    二维数组
    创建对象
    取出数组最大值与最小值
    4-jQuery
    3-jQuery
    2-jQuery
    1-jQuery
    Spark共享变量(广播变量、累加器)
  • 原文地址:https://www.cnblogs.com/gjghfd/p/5645059.html
Copyright © 2011-2022 走看看