zoukankan      html  css  js  c++  java
  • POJ

    题意:

      P门课程,N个学生。给出每门课程的选课学生,求是否可以给每门课程选出一个课代表。课代表必须是选了该课的学生且每个学生只能当一门课程的。

    题解:

      匈牙利算法的入门题。

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <vector>
    using namespace std;
    const int maxn = 1005;
    int t; 
    int k, s;
    int flag;
    int p, n;
    int vis[maxn];
    int match[maxn];
    vector<int> g[maxn];
    void init() {
        flag = 0;
        memset(match, -1, sizeof(match));
        for(int i = 1; i <= p+n; i++) g[i].clear();
    }
    bool dfs(int u) {
        vis[u] = 1;
        for(int i = 0; i < g[u].size(); i++) {
            int v = g[u][i], w = match[v];
            if(w<0 || !vis[w]&&dfs(w)) {
                match[u] = v;
                match[v] = u;
                return true;
            }
        }
        return false;
    }
    int hungarian() {
        int res = 0;
        for(int u = 1; u <= s+p; u++) {
            if(match[u] < 0) {
                memset(vis, 0, sizeof(vis));
                if(dfs(u)) res++;
            }
        }
        return res;
    }
    int main() {
        scanf("%d", &t);
        while(t--) {
            init();
            scanf("%d%d", &p, &n);
            for(int i = 1; i <= p; i++) {
                scanf("%d", &k);
                if(!k) flag = 1;
                while(k--) {
                    scanf("%d", &s);
                    g[i].push_back(s+p);
                    g[s+p].push_back(i); 
                }
            }
            if(flag || n<p) {
                puts("NO");
                continue;
            }
            int ans = hungarian();
            if(ans == p) puts("YES");
            else puts("NO");
        }
    } 
    View Code
  • 相关阅读:
    Dagger2 (二) 进阶篇
    Dagger2 (一) 入坑篇
    RoboGuice 3.0 (三)总结篇
    RoboGuice 3.0 (二)进阶篇
    RoboGuice 3.0 (一)入坑篇
    spring源码
    Java transient关键字使用
    Spring源码学习
    jvm系列(一):java类的加载机制
    Java中newInstance()和new()
  • 原文地址:https://www.cnblogs.com/Pneuis/p/8688618.html
Copyright © 2011-2022 走看看