zoukankan      html  css  js  c++  java
  • 二分图匹配——POJ

    题目链接

    题目含义

    每门课有几名同学参加,要求每门课选一个代表,当然代表只能由参加这门课的学生中选,并且一个人只能当一门课的代表

    题目分析

    二分图匹配,是课程去找一个同学与它匹配,如果每门课都匹配上了就输出yes,否则no

    题目代码

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    using namespace std;
    const int maxn=3e4+7;
    struct edge{
        int to,next;
    }e[maxn];
    int head[200],tot;
    void add(int u,int v){
        e[tot].to=v;
        e[tot].next=head[u];
        head[u]=tot++;
    }
    bool vis[400];
    int course[400],t,m,n,x,y;
    void init(){
        tot=0;
        memset(head,-1,sizeof(head));
        memset(course,0,sizeof(course));
    }
    bool find(int u){
        for(int i=head[u];i!=-1;i=e[i].next){
            int v=e[i].to;
            if(vis[v])continue;
            vis[v]=true;
            if(!course[v]||find(course[v])){
                course[v]=u;return true;
            }
        }return false;
    }
    int main(){
        scanf("%d",&t);
        while(t--){
            scanf("%d%d",&m,&n);
            init();
            for(int i=1;i<=m;i++){
                scanf("%d",&x);
                for(int j=1;j<=x;j++){
                    scanf("%d",&y);
                    add(i,y);
                }
            }
            int sum=0;
            for(int i=1;i<=m;i++){
                memset(vis,false,sizeof(vis));
                if(find(i))sum++;
            }
            if(sum==m)printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    51nod 1565模糊搜索(FFT)
    51nod 1851俄罗斯方块(trick)
    可持久化线段树(主席树)模板
    BZOJ2191:Splite
    BZOJ4197:[NOI2015]寿司晚宴
    BZOJ3198:[SDOI2013]SPRING
    BZOJ1500:[NOI2005]维修数列
    BZOJ3527:[ZJOI]力
    BZOJ3160:万径人踪灭
    CODE[VS]1372:DNA
  • 原文地址:https://www.cnblogs.com/helman/p/11290800.html
Copyright © 2011-2022 走看看