关键词:
题意:一个农场主有N头牛,现在要给牛喂吃的,喝的。但是没头牛都有它自己喜欢的食物
和饮料。求最多能满足多少头牛的需求。(即:按照牛的意愿分配食物)
思路:这个题一看就是匹配问题(即:把食物和饮料与牛匹配起来),但这是1对2的匹配,所以肯定
没法用二分图匹配算法来解题。但图的匹配问题可以用最大流来实现,从这题来看,可以将牛
一分为二,一个与食物匹配,一个与饮料匹配,再将同一头牛匹配起来即可。
1 #include <iostream> 2 #include <string.h> 3 #include <algorithm> 4 #include <vector> 5 using namespace std; 6 7 int N, F, D; 8 bool mapf[105][105], mapd[105][105]; 9 10 11 struct edge { 12 int to, cap, rev; 13 edge(int a, int b, int c) :to(a), cap(b), rev(c) {} 14 }; 15 16 vector<edge> G[405]; 17 bool vis[405]; 18 19 void add_edge(int from, int to, int cap) { //建边及反向边 20 edge a(to, cap, G[to].size()); 21 G[from].push_back(a); 22 edge b(from, 0, G[from].size() - 1); 23 G[to].push_back(b); 24 } 25 26 int dfs(int v, int t, int f) { 27 if(v == t) return f; 28 vis[v] = true; 29 for (int i = 0; i < G[v].size(); i++) { 30 edge &e = G[v][i]; 31 if (!vis[e.to] && e.cap > 0) { 32 int d = dfs(e.to, t, min(f, e.cap)); 33 if (d > 0) { 34 e.cap -= d; 35 G[e.to][e.rev].cap += d; 36 return d; 37 } 38 } 39 } 40 return 0; 41 } 42 43 int max_flow(int s, int t) { 44 int flow = 0; 45 for (;;) { 46 memset(vis, 0, sizeof(vis)); 47 int f = dfs(s, t, 1000); 48 if (f == 0)return flow; 49 flow += f; 50 } 51 return flow; 52 } 53 54 void solve() { 55 int t = 0, s = 2 * N + F + D + 1; 56 for (int i = 1; i <= F; i++) { //建起点t与食物的边 57 add_edge(t, 2 * N + i, 1); 58 } 59 for (int i = 1; i <= D; i++) { //建饮料与终点s的边 60 add_edge(2 * N + F + i, s, 1); 61 } 62 for (int i = 1; i <= N; i++) {//建牛的边及与食物和饮料的边 63 add_edge(i, N + i, 1); 64 for (int j = 1; j <= F; j++) { 65 if (mapf[j][i])add_edge(2 * N + j, i, 1); 66 } 67 for (int j = 1; j <= D; j++) { 68 if (mapd[i][j])add_edge(N + i, 2 * N + F + j, 1); 69 } 70 } 71 cout << max_flow(t, s) << endl; 72 } 73 74 int main() 75 { 76 cin >> N >> F >> D; 77 memset(mapf, false, sizeof(mapf)); 78 memset(mapd, false, sizeof(mapd)); 79 for (int i = 1; i <= N; i++) { 80 int f, d; 81 cin >> f >> d; 82 for (int j = 0; j < f; j++) { 83 int a; 84 cin >> a; 85 mapf[a][i] = true; 86 } 87 for (int j = 0; j < d; j++) { 88 int a; 89 cin >> a; 90 mapd[i][a] = true; 91 } 92 } 93 solve(); 94 return 0; 95 }
2021年科大讯飞猪只盘点挑战赛前三名队伍分享
文章目录1.第一名得迈科技1.1团队介绍1.2算法方案解析1.2.1数据噪声1.2.2数据预处理1.2.3数据增强1.2.4模型训练与改进1.2.5模型训练trick1.3改进与创新1.4优化思路2.第二名9vE1Mtxp5k2.1团队介绍2.2赛题目标2.3赛题挑战2.4算法设计 查看详情
阿里2014移动安全挑战赛第二题调试笔记
...近在学习安卓安全,看到52破解上面有分析2014年阿里安全挑战赛的第二个crackme的文章。勾起了我的回忆,那是我第一次参加安全比赛,在安卓安全也没有做多深入的学习。第一题比较简单,直接在logcat里面就可以看到输出的信... 查看详情
[poj]3281dining
原题题目大意N头奶牛,只能吃某种食物和饮料(而且只能吃特定的一份)一种食物被一头牛吃了之后,其余牛就不能吃了第一行有N,F,D三个整数接着2-N+1行代表第i头牛,前面两个整数是Fi与Di(食物与饮料的种类数量),接着是食物的种类与... 查看详情
2021年科大讯飞医疗实体及关系识别挑战赛前三名队伍分享
文章目录1.第一名Sayoulala1.1团队介绍1.2方案解析1.2.1赛题分析1.2.2方案选择1.2.3数据统计分析1.2.4方案框架1.3优化思路1.3.1待优化点1.3.2可尝试思路2.第二名五叶草2.1团队介绍2.2方案解析2.2.1赛题解析2.2.2模型设计 查看详情
acm-挑战题之排列生成(代码片段)
题目描述:挑战题之排列生成一自然数N,设N为3,则关于N的字典序排列为123,132,213,231,312,321。对于一个自然数N(1<=N<=9),你要做的便是生成它的字典序排列。输入第一行为自然数N。输出输出对应于N的字典序排列,每个排... 查看详情
2021年科大讯飞新冠肺炎声音诊断挑战赛前三名队伍分享
文章目录1.第一名UoWp2s4l01.1成员介绍1.2赛题简介1.3算法方案解析1.3.1问题分析1.3.2降维可视化1.3.3模型训练1.4优化思路2.第二名NWPU_BFZY2.1团队介绍2.2算法方案解析2.2.1赛题简介2.2.2数据统计2.2.3去静音2.2.4数据增强 查看详情
2021年科大讯飞高分子塑料桶贴画外观检测挑战赛前三名队伍分享
文章目录1.第一名Swangeese1.1团队介绍1.2赛题介绍1.3算法方案1.3.1算法概述1.3.2预处理1.3.3关键像素定位1.3.4后处理1.4总结2.第二名Onepiece2.1团队介绍2.2赛题简介2.3算法方案2.3.1整体架构2.3.2关键点定位2.3 查看详情
2020第6届中国大学生程序设计竞赛ccpc长春站,签到题3题(代码片段)
文章目录A.KryptonD.MeaninglessSequenceF.StrangeMemory补题链接:https://codeforces.com/gym/102832A.Kryptontimelimitpertest1secondmemorylimitpertest256megabytesinputstandardinputoutputstandardoutputInthef 查看详情
2020第6届中国大学生程序设计竞赛ccpc长春站,签到题3题(代码片段)
文章目录A.KryptonD.MeaninglessSequenceF.StrangeMemory补题链接:https://codeforces.com/gym/102832A.Kryptontimelimitpertest1secondmemorylimitpertest256megabytesinputstandardinputoutputstandardoutputInthef 查看详情
2021年中国高校大数据挑战赛-智能运维中的异常检测与趋势预测-a题思路(思路程序10.31更新)
2021年中国高校大数据挑战赛A题思路 2021年中国高校大数据挑战赛A题思路 2021年中国高校大数据挑战赛A题思路 2021年中国高校大数据挑战赛A题思路 2021年中国高校大数据挑战赛A题思路 2021年中国高校大数据挑战赛A题思路 2021... 查看详情
三周第二次课(12月26)3.4usermod命令3.5用户密码管理3.6mkpasswd命令
...令用来改变userid,必须确认这名user没在电脑上执行任何程序。你需手动更改使用者的crontab档。也需手动更改使用者的at工作档。采用NISse 查看详情
第46届国际大学生程序设计竞赛(icpc)亚洲区域赛(昆明),签到题3题(代码片段)
文章目录K.KingofGamersD.DivisionsF.FindtheMaximum补题链接:https://ac.nowcoder.com/acm/contest/32708K.KingofGamers链接:https://ac.nowcoder.com/acm/contest/32708/K来源:牛客网题目描述LittleGisgoingtopl 查看详情
[转]aoj0525osenbei《挑战程序设计竞赛(第2版)》练习题答案
来自 码农场 ? AOJ0525Osenbei《挑战程序设计竞赛(第2版)》练习题答案只把代码复制过来,原博的其他分析请看链接。1#include<iostream>2#include<bitset>3#include<algorithm>45usingnamespacestd;67bitset<10000>cookie 查看详情
[架构之路-15]:目标系统-硬件平台-什么是多核设计?多核面临的问题?什么是大小核设计?
...成2.1多核之间通信模型2.2多核的案例第3章多核处理器的挑战3.1程序执行问题3.2Cache一致性问题3.3核间互联3.4总线设计3.5操作系统设计3.6低功耗设计3.7存储器墙3.8可靠性及安全性设计3.9同构还是异构第4章大小核架构进步了解:... 查看详情
湖南省第6届程序设计大赛第一题汽水瓶
题目A汽水瓶 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以... 查看详情
湖南省第6届程序大赛第3题数字整除
题目C数字整除 定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数。例如,34是17的倍数,因为3-20=-17是17的倍数;201不是17的倍数,因为20-5=15不是1... 查看详情
aizu2249roadconstruction单源最短路变形《挑战程序设计竞赛》模板题
KingMerceristhekingofACMkingdom.Thereareonecapitalandsomecitiesinhiskingdom.Amazingly,therearenoroadsinthekingdomnow.Recently,heplannedtoconstructroadsbetweenthecapitalandthecities,butitturnedoutthatt 查看详情
2020-2021年度第二届全国大学生算法设计与编程挑战赛(冬季赛)——正式赛(代码片段)
目录A题-塔B题-日记E题-神仙爱采药I题-奇怪的传输机增加了J题-奇怪的小鸭子也增加了K题-关于哥俩好的数字数字这件事A题-塔思路:签到题,26层,第i层先打印26-i个空格,然后正序和逆序打印字符,每一层换... 查看详情