zoukankan      html  css  js  c++  java
  • 匈牙利算法 cogs 886. [USACO 4.2] 完美的牛栏

    886. [USACO 4.2] 完美的牛栏

    ★★☆   输入文件:stall4.in   输出文件:stall4.out   简单对比
    时间限制:1 s   内存限制:128 MB
    USACO/stall4(译by Felicia Crazy)

    描述

    农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术。不幸的是,由于工程问题,每个牛栏都不一样。第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们喜欢的那些牛栏中产奶。上个星期,农夫约翰刚刚收集到了奶牛们的爱好的信息(每头奶牛喜欢在哪些牛栏产奶)。一个牛栏只能容纳一头奶牛,当然,一头奶牛只能在一个牛栏中产奶。

    给出奶牛们的爱好的信息,计算最大分配方案。

    格式

    PROGRAM NAME: stall4

    INPUT FORMAT:

    (file stall4.in)

    第一行
    两个整数,N (0 <= N <= 200)和M (0 <= M <= 200)。N是农夫约翰的奶牛数量,M是新牛棚的牛栏数量。
    第二行到第N+1行

    一共N行,每行对应一只奶牛。第一个数字(Si)是这头奶牛愿意在其中产奶的牛栏的数目(0 <= Si<= M)。后面的Si个数表示这些牛栏的编号。牛栏的编号限定在区间(1..M)中,在同一行,一个牛栏不会被列出两次。

    OUTPUT FORMAT:

    (file stall4.out)

     只有一行。输出一个整数,表示最多能分配到的牛栏的数量。

    SAMPLE INPUT (file stall4.in)

    5 5

    2 2 5

    3 2 3 4

    2 1 5

    3 1 2 5

    1 2

    SAMPLE OUTPUT (file stall4.out)

    4
     1 #define N 205
     2 #include<iostream>
     3 using namespace std;
     4 #include<cstdio>
     5 #include<cstring>
     6 #include<vector>
     7 int n,m,lin[N];
     8 vector<int>edge[N];
     9 bool vis[N];
    10 int read()
    11 {
    12     int ret=0,ff=1;
    13     char s=getchar();
    14     while(s<'0'||s>'9')
    15     {
    16         if(s=='-') ff=-1;
    17         s=getchar();
    18     }
    19     while(s>='0'&&s<='9')
    20     {
    21         ret=ret*10+s-'0';
    22         s=getchar();
    23     }
    24     return ret;
    25 }
    26 void inpu()
    27 {
    28     n=read();m=read();
    29     int s,x;
    30     for(int i=1;i<=n;++i)
    31     {
    32         s=read();
    33         for(int j=1;j<=s;++j)
    34         edge[i].push_back(read());
    35     }
    36 }
    37 bool xylfind(int k)
    38 {
    39     int siz=edge[k].size();
    40     for(int i=0;i<siz;++i)
    41     {
    42         int v=edge[k][i];
    43         if(!vis[v])
    44         {
    45             vis[v]=true;
    46             if(!lin[v]||xylfind(lin[v]))
    47             {
    48                 lin[v]=k;
    49                 return true;
    50             }
    51         }
    52     }
    53     return false;
    54 }
    55 int main()
    56 {
    57     freopen("stall4.in","r",stdin);
    58     freopen("stall4.out","w",stdout);
    59     inpu();
    60     int ans=0;
    61     for(int i=1;i<=n;++i)
    62     {
    63         memset(vis,0,sizeof(vis));
    64         if(xylfind(i)) ans++;
    65     }
    66     printf("%d
    ",ans);
    67     fclose(stdin);
    68     fclose(stdout);
    69     return 0;
    70 }
  • 相关阅读:
    javascript教程系列-10.DOM(下)
    javascript教程系列-9.DOM(上)
    javascript教程系列-8.BOM
    javascript教程系列-7.Date对象
    javascript教程系列-6.String类型
    javascript教程系列-5.数组
    Python字符串、元组、列表、字典互相转换的方法
    python 中函数
    python中的字符串 列表 字典
    python 基础 知识
  • 原文地址:https://www.cnblogs.com/c1299401227/p/6064236.html
Copyright © 2011-2022 走看看