zoukankan      html  css  js  c++  java
  • HDU

    题意:给出P门课程,N个学生。
    每一门课程可能有多个学生感兴趣
    然后我们需要匹配,使得每一门课程都只包含一名对其感兴趣的学生
    问:能否匹配成立
    思路:这个就是典型的二分图匹配问题。常用匈牙利算法

    完整代码:(一开始写成了无向图....)写成有向图是因为学生是可以剩余的

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    const int maxn = 1e3;
    const int maxm = 1e6;
    int match[maxn];
    int vis[maxn];
    int head[maxn]; 
    int top,ans;
    int n,m;
    struct Edge
    {
        int v,next;
    }edge[maxm];
    void add(int u,int v){
        edge[top].v = v;
        edge[top].next = head[u];
        head[u] = top++;
    }
    void init(){
        memset(head,-1,sizeof(head));
        memset(match,0,sizeof(match));
        top = ans = 0;
    }
    //匈牙利算法:递归找增广路径
    bool Find(int u){
        for(int i = head[u]; ~i ;i =edge[i].next){
            int v = edge[i].v;
            if(!vis[v]){
                vis[v] = 1;
                if(!match[v]||Find(match[v])){
                    match[v] = u;
                    return true;
                }
            }
        }
        return false;
    }
    int main(){
        int T;
        cin>>T;
        while(T--){
            cin>>n>>m;
            int num;
            init();
            for(int i = 1;i<=n;i++){
                cin>>num;
                while(num--){
                    int v;
                    cin>>v;
                    add(i,v);
                }
            }
            for(int i = 1;i<=n;i++){
                memset(vis,0,sizeof(vis));
                if(Find(i)) ans++;
            }
            if(ans==n) cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
    }
  • 相关阅读:
    python解决线性规划问题
    python解决多变量最优化问题
    python处理单变量优化
    java枚举类常用方法
    java实现十大排序算法
    python解方程
    python科学计算包
    python做微积分
    php定界符<<<EOF讲解
    一键安装LNMP/LAMP
  • 原文地址:https://www.cnblogs.com/Tianwell/p/11332927.html
Copyright © 2011-2022 走看看