zoukankan      html  css  js  c++  java
  • 寻找代表元(codevs 2776)

    题目描述 Description

    广州二中苏元实验学校一共有n个社团,分别用1到n编号。
    广州二中苏元实验学校一共有m个人,分别用1到m编号。每个人可以参加一个或多个社团,也可以不参加任何社团。
    每个社团都需要选一个代表。谦哥希望更多的人能够成为代表。

    输入描述 Input Description

    第一行输入两个数n和m。
    以下n行每行若干个数,这些数都是不超过m的正整数。其中第i行的数表示社团i的全部成员。每行用一个0结束。

    输出描述 Output Description

    输出最多的能够成为代表的人数。

    样例输入 Sample Input

    4 4
    1 2 0
    1 2 0
    1 2 0
    1 2 3 4 0

    样例输出 Sample Output

    3

    //裸匈牙利算法
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #define M 210
    using namespace std;
    int used[M],belong[M],a[M][M],n,m;
    int find(int i)
    {
        for(int j=1;j<=n;j++)
          if(!used[j]&&a[i][j])
          {
              used[j]=1;
              if(!belong[j]||find(belong[j]))
              {
                  belong[j]=i;
                  return 1;
            }
          }
        return 0;
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
            int x;
            while(1)
            {
                scanf("%d",&x);
                if(!x)break;
                a[x][i]=1;
            }
        }
        int tot=0;
        for(int i=1;i<=m;i++)
          if(find(i))
          {
              memset(used,0,sizeof(used));
              tot++;
          }
        printf("%d",tot);
        return 0;
    }
    View Code
  • 相关阅读:
    spring core与context的理解
    maven项目中pom.xml快速生成
    MariaDB常用命令
    MariaDB快速入门指南
    My_plan_51
    Oracle简介及安装
    Oracle单行函数
    oracle多表查询
    单点登录原理与简单实现
    JavaScript 的时间消耗
  • 原文地址:https://www.cnblogs.com/harden/p/5631779.html
Copyright © 2011-2022 走看看