★★☆   输入文件: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 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 const int maxn=1e5;
 5 inline int min_(int x,int y){return x<y?x:y;}
 6 int n,m,s,t,ans;
 7 int a,b;
 8 int h[maxn],hs=1,ew[maxn],et[maxn],en[maxn];
 9 void add(int u,int v){
10     ++hs,et[hs]=v,ew[hs]=1,en[hs]=h[u],h[u]=hs;
11     ++hs,et[hs]=u,ew[hs]=0,en[hs]=h[v],h[v]=hs;
12 }
13 int q[maxn],head,tail;
14 int d[maxn];
15 void SPFA(int s){
16     memset(d,0,sizeof(d));
17     head=tail=0;
18     q[head++]=s,d[s]=1;
19     while(head>tail){
20         a=q[tail++];
21         for(int i=h[a];i;i=en[i])
22         if(!d[et[i]]&&ew[i]){
23             d[et[i]]=d[a]+1;
24             if(et[i]==t) return;
25             q[head++]=et[i];
26         }
27     }
28 }
29 int ap(int k,int nw){
30     if(k==t) return nw;
31     int bw=nw;
32     for(int i=h[k];i;i=en[i])
33     if(ew[i]&&d[et[i]]==d[k]+1){
34         int dw=ap(et[i],min_(bw,ew[i]));
35         if(dw) ew[i]-=dw,ew[i^1]+=dw,bw-=dw;
36         else d[et[i]]=0;
37     }
38     return nw-bw;
39 }
40 void Dinic(){while(SPFA(s),d[t]) ans+=ap(s,n);}
41 int main(){
42     freopen("stall4.in","r",stdin);
43     freopen("stall4.out","w",stdout);
44     scanf("%d%d",&n,&m);
45     s=n+m+1,t=s+1;
46     for(int i=1;i<=n;i++) add(s,i);
47     for(int i=1;i<=m;i++) add(n+i,t);
48     for(int i=1;i<=n;i++){
49         scanf("%d",&a);
50         for(int j=1;j<=a;j++){
51             scanf("%d",&b);
52             add(i,n+b);
53         }
54     }
55     Dinic();
56     printf("%d\n",ans);
57     return 0;
58 }

转载于:https://www.cnblogs.com/J-william/p/7041209.html

[USACO 4.2] 完美的牛栏相关推荐

  1. [USACO 4.2.2] The Perfect Stall 完美的牛栏

    题目链接 匈牙利算法模板题 #include <iostream> #include <cstring> #include <cstdlib> #include & ...

  2. [ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)

    描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们 ...

  3. [USACO4.2]完美的牛栏The Perfect Stall

    https://www.luogu.org/problemnew/show/P1894 题解:网络流+最大流 /* *@Author: STZG *@Language: C++ */ #include ...

  4. USACO Section 4

    前言 好久没更新这个系列了,最近闲的无聊写一下.有两题搜索懒得写了. P2737 [USACO4.1]麦香牛块Beef McNuggets https://www.luogu.com.cn/probl ...

  5. 匈牙利算法——转自:BYVoid

    匈牙利算法 链接: USACO 4.2.2 The Perfect Stall 完美的牛栏 stall4 这是一种用增广路求二分图最大匹配的算法.它由匈牙利数学家Edmonds于1965年提出,因而得 ...

  6. bellman ford 算法 判断是否存在负环

    Flyer 目录视图 摘要视图 订阅 微信小程序实战项目--点餐系统        程序员11月书讯,评论得书啦        Get IT技能知识库,50个领域一键直达 关闭 bellman for ...

  7. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  8. USACO 2021 January Contest, BronzeProblem 3. Just Stalling题解

    题目描述 Farmer John 有 N 头奶牛(1≤N≤20),高度为 a1-aN.他的牛栏有 N 个牛棚,高度限制分别为b1-bN(例如,如果 b5=17,那么一头高度不超过 17 的奶牛可以住在 ...

  9. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

最新文章

  1. C++拾取——Linux下实测布隆过滤器(Bloom filter)和unordered_multiset查询效率
  2. 为什么 ConcurrentHashMap 的读操作不需要加锁?
  3. 无锡初一计算机试题,2015年无锡市初中信息技术考查选择题.doc
  4. Eclipse中使用SVN
  5. linux 上安装ntop
  6. java结束全部操作代码_Java基本的线程操作(附代码)
  7. Windows如何自定义U盘盘符、文件夹图标、文件夹背景
  8. python怎么输出一个数组_python中实现将多个print输出合成一个数组
  9. java 回归遍历_回归基础:代码遍历
  10. 前端学习(1510):单页应用SPA实现原理
  11. nodejs异步读取文件与同步读取文件的区别
  12. oracle ora 00910,NVARCHAR2字段超长问题:ORA-00910: specified length too long for its datatype
  13. 【开发者笔记】java 利用jna调用c#的dll
  14. WebLogic Clustering Overview Slides
  15. 行为型设计模式(1)—— 责任链模式(Chain of Responsibility Pattern)
  16. Mac上重装pycharm打不开的解决方法
  17. 揭秘:为什么羊毛党可以0元购物?
  18. 内网渗透靶场(上)加入目标网段,抓取管理员密码 #zkaq
  19. 木瓜移动每日快讯0511:谷歌Chrome引入新隐私功能fenced frame
  20. html登陆没反应,ipad屏幕输入密码没反应

热门文章

  1. .NET 面试题(2)
  2. 控制DIV内容滚动的方法,实现不用拖滚动条就可以看到最新消息
  3. 实时数据处理插件开发flume+kafka+storm:flume
  4. STM32F4_USART配置及细节描述
  5. 用委托实现窗体间传值
  6. 【转】概要设计说明书
  7. 嵌入式linux系统和嵌入式android系统的区别和联系
  8. 全国计算机等级考试题库二级C操作题100套(第94套)
  9. matlab入门之旅,MATLAB 入门之旅学习笔记
  10. dataframe常用操作_Pandas | Dataframe的merge操作,像数据库一样尽情join