题面

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

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

题意

如题面。

题解

  1. 每只奶牛只喜欢在自己喜欢的牛棚里面产奶。(匹配)

  2. 一个牛棚只能容纳一头奶牛。

  3. 最大的分配方案。

匈牙利算法(匹配算法),个人感觉实质上就是一个DFS的匹配算法。

伪代码:

bool dfs(int x)
{while(找到Xi的关联顶点Yj){if(顶点Yj不在增广路径上){将Yj加入增广路if(Yj是未覆盖点或者Yj的原匹配点Xk能找到增广路径){ //扩充集合M将Yj的匹配点改为Xi;返回true;}}返回false;
}

根据题意可以知道这是一道匈牙利算法的模板题。于是开始根据伪代码来造代码。

代码

代码1(my code)

#include<bits/stdc++.h>
using namespace std;const int maxn = 10010;
const int maxm = 10010;
int n,m,tong[maxm],ans;
bool vis[maxn],love[maxn][maxm];inline int read(){int k=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){k=k*10+ch-'0';ch=getchar();}return k*f;
}inline void init()
{cin >> n >> m;for(int i=1;i<=n;i++){int l=read();while(l--){love[i][read()]=true;}}
}bool dfs(int x)
{for(int i = 1;i <= m;++i){if(!vis[i] && love[x][i]){vis[i] = true;if(tong[i]==0 || dfs(tong[i])){tong[i] = x;return true;}}}return false;
}int main(int argc, char const *argv[])
{init();for(int i = 1;i <= n;++i){memset(vis,0,sizeof(vis));if(dfs(i)) ans++;}cout << ans;return 0;
}

代码2(rank 1)

#include <cstdio>
#include <cstring>
using namespace std;
#define M(x) memset(x, false, sizeof(x))
const int maxn = 205;
int N, M, ans, link[maxn];
bool vis[maxn], A[maxn][maxn];
bool dfs(int x){for(int i = 1; i <= N; i++)if(A[x][i] && !vis[i]){vis[i] = true;if(!link[i] || dfs(link[i])){link[i] = x;return true;}}return false;
}
inline int GetInt(){char x;int ret;while((x = getchar()) < '0' || x > '9');ret = x - '0';while((x = getchar()) >= '0' && x <= '9') ret = ret * 10 + x - '0';return ret;
}
int main(){N = GetInt(), M = GetInt();for(int i = 1; i <= N; i++){int sum;sum = GetInt();for(int j = 1, OP; j <= sum; j++){OP = GetInt();A[i][OP] = true;} }for(int i = 1; i <= N; i++){M(vis);if(dfs(i)) ans++;} printf("%d", ans);return 0;
}

转载于:https://www.cnblogs.com/Chicago/p/9920700.html

题解 P1894 【[USACO4.2]完美的牛栏The Perfect Stall】相关推荐

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

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

  2. [USACO 4.2] 完美的牛栏

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

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

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

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

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

  5. OpenJudge 2810(1543) 完美立方 / Poj 1543 Perfect Cubes

    1.链接地址: http://bailian.openjudge.cn/practice/2810/ http://bailian.openjudge.cn/practice/1543/ http:/ ...

  6. USACO Section 4

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

  7. SMSC 2021 Day13Day14 部分题解

    SMSC 2021 Day13&Day14 部分题解 Day13 真正的完美 inpref (数论,数论函数,线性筛) 两次 double (树状数组,可持久化线段树,莫队) Day14 Da ...

  8. USACO Section 4.2 题解

    最近开始做荒废了好久的USACO,希望能够以一天一个Section的速度做完吧.题解也会每天更新. Drainage Ditches(ditch) 本题是个最基本的网络流.这里我用的Dinic算法,递 ...

  9. css vw单位_使用CSS vw单位创建完美的响应形状

    css vw单位 As page layouts become more complex, developers require access to a greater range of measur ...

  10. 完美的扎克伯格,倒霉的Facebook

    硅谷Live / 实地探访 / 热点探秘 / 深度探讨 人设崩塌 昨天(美国时间3月21日周三),足足五天后,小扎正式在他个人的脸书主页对 Facebook 近 5000 万用户数据被第三方软件泄漏的 ...

最新文章

  1. SLF4J 的几种实际应用模式--之二:SLF4J+Logback
  2. 通过ctrl+r快速启动程序
  3. Python之分享常用的五款动态数据可视化工具
  4. 无刷电机和有刷电机的详解区别
  5. HTTP 200 OK和HTTP 304 Not modified的由来
  6. ASP.NET 中处理页面“回退”的方法
  7. 自动推荐图表、智能分析,这个新出的分析工具有点酷!
  8. 最近录制了一些视频,搭建和测试了一下视频平台
  9. JAVA学习经验--总结JAVA抽象类和接口
  10. Hive窗口分析函数(案例详细讲解)
  11. Elasticsearch LBS 的简单应用
  12. 代做matlab程序价格,代做data collection、Matlab设计代写、Matlab代做、代做Matlab编程代写R语言程序|代做R语言编程...
  13. numpy_10 思维导图
  14. 巧用立体声codec CL1026 的EQ
  15. 看论文时的几个数学术语
  16. oracle awr 执行计划,AWR(五)-利用AWR生成SQL执行计划(SQLREPORT)并进行优化 | 信春哥,系统稳,闭眼上线不回滚!...
  17. sudo no tty present and no askpass program specified
  18. Windows系统盘清理
  19. P5017 NOIP2018 普及组 摆渡车
  20. 剑指offer--20.顺时针打印矩阵

热门文章

  1. CentOS7中安装屏幕键盘(软键盘)
  2. ACPC Kickoff 2021
  3. Win300英雄服务器不显示,win7系统玩不了300英雄的解决方法
  4. 冰原服务器维护,怪猎OL9月20日0:00全区全服维护更新公告
  5. Github 资源收集
  6. 实用网址备忘(实时更新)
  7. 1024我的Java上车日记(二)
  8. css边框图片border-image切图原理
  9. 做电子相册思路 c语言,C/C++编程笔记:C语言制作情侣必备《爱情电子相册》,源码解析!...
  10. ds90ub934 i2c 配置_DS90UB934-Q1 FPD-Link III 解串器 摄像头、环视系统应用