Dining

【BZOJ1711】【Usaco2007 Open】Dining 【题目链接】 点击打开链接 【思路要点】 观察数据范围以及类似于容量限制的一列条件,考虑用最大流解题。一点对答案的贡献可以看做一个(食物、牛、饮料)的三元组,其中食物、牛、饮料中的每个元素仅能使用一次,且食物-牛和牛-饮料均可以根据给出的关系相互匹配。建立分层图,对中间的元素(牛)进行拆点限流,运行最大流即可。时间复杂度\(O(Dinic(2*N+F+D, 阅读详情

Description
Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she will consume no others.

Farmer John has cooked fabulous meals for his cows, but he forgot to check his menu against their preferences. Although he might not be able to stuff everybody, he wants to give a complete meal of both food and drink to as many cows as possible.

Farmer John has cooked F (1 ≤ F ≤ 100) types of foods and prepared D (1 ≤ D ≤ 100) types of drinks. Each of his N (1 ≤ N ≤ 100) cows has decided whether she is willing to eat a particular food or drink a particular drink. Farmer John must assign a food type and a drink type to each cow to maximize the number of cows who get both.

Each dish or drink can only be consumed by one cow (i.e., once food type 2 is assigned to a cow, no other cow can be assigned food type 2).

Input
Line 1: Three space-separated integers: N, F, and D
Lines 2.. N+1: Each line i starts with a two integers Fi and Di, the number of dishes that cow i likes and the number of drinks that cow i likes. The next Fi integers denote the dishes that cow i will eat, and the Di integers following that denote the drinks that cow i will drink.
Output
Line 1: A single integer that is the maximum number of cows that can be fed both food and drink that conform to their wishes
Sample Input
4 3 3
2 2 1 2 3 1
2 2 2 3 1 2
2 2 1 3 1 2
2 1 1 3 3
Sample Output
3
有n个牛,只喝特定的水,吃特定的饭,问最多满足多少头牛。
这是两个匹配,匹配水和匹配饭,一开始的想法是扫一遍牛,先判断能否满足水,再判断满足饭,如果都满足就加入。
然而是错的,因为这需要把两个匹配所有的可能都连接起来,然而并不能实现。

正确的建图并不能想到,将水变为f个点,与n个牛连接起来,再把牛与饭连接起来,再做一个起点和终点,起点连水,终点连饭,如果有起点到终点的通路,就说明从水到牛到饭是有匹配的,然而还要考虑到,每头牛只能使用一次,所以要把牛用两个点标记连接,这样就处理了牛的使用次数问题。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
#include<string>
#include<cmath>
#include<set>
#include<map>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn = 1005;
struct Edge{
    int form, to, cap, flow;
    Edge(int u, int v, int c, int f) :form(u), to(v), cap(c), flow(f){}
};
struct EdmondKarp{
    int n, m;
    vector<Edge>edges;
    vector<int>G[maxn];
    int a[maxn];
    int p[maxn];

    void init(int n)
    {
        for (int i = 0; i < n; i++)G[i].clear();
        edges.clear();
    }

    void AddEdge(int from, int to, int cap)
    {
        edges.push_back(Edge(from, to, cap, 0));
        edges.push_back(Edge(to, from, 0, 0));
        m = edges.size();
        G[from].push_back(m - 2);
        G[to].push_back(m - 1);
    }

    int Maxflow(int s, int t)
    {
        int flow = 0;
        for (;;)
        {
            memset(a, 0, sizeof(a));
            queue < int >Q;
            Q.push(s);
            a[s] = inf;
            while (Q.size())
            {
                int x = Q.front(); Q.pop();
                for (int i = 0; i < G[x].size(); i++)
                {
                    Edge& e = edges[G[x][i]];
                    if (!a[e.to] && e.cap>e.flow)
                    {
                        p[e.to] = G[x][i];
                        a[e.to] = min(a[x], e.cap - e.flow);
                        Q.push(e.to);
                    }
                }
                if (a[t])break;
            }
            if (!a[t])break;
            for (int u = t; u != s; u = edges[p[u]].form)
            {
                edges[p[u]].flow += a[t];
                edges[p[u] ^ 1].flow -= a[t];
            }
            flow++;
        }
        return flow;
    }
}ans;
int main()
{
    int i, j, m, n, t, f, d, s;
    while (scanf("%d%d%d", &n, &f, &d) != EOF)
    {
        ans.init(305);
        s = 0; t = n + f + d + 1 + n;
        for (i = 1; i <= f; i++)
            ans.AddEdge(0, i, 1);
        for (i = 1; i <= n; i++)
        {
            int x, y, temp;
            cin >> x >> y;
            for (j = 1; j <= x; j++)
            {
                cin >> temp;
                ans.AddEdge(temp, f + i, 1);
            }
            for (j = 1; j <= y; j++)
            {
                cin >> temp;
                ans.AddEdge(f + n + i, temp + n * 2 + f, 1);
            }
        }
        for (i = 1; i <= n; i++)
            ans.AddEdge(f + i, f + n + i, 1);
        for (i = 1; i <= d; i++)
            ans.AddEdge(n + n + f + i, t, 1);
        cout << ans.Maxflow(0, t) << endl;
    }
    return 0;
}
LAMMPS实操系列(四): 高熵合金FCC-CoCrCuFeNi的退火模拟 我们对FCC-CoCrCuFeNi的退火模拟思路主要是,首先将材料以均匀的速率用100 ps从300 K升温至1000 K,然后在1000 K的温度下平衡100 ps,随后以均匀的速率用100 ps从1000 K降温至300 K,随后通过共轭梯度下降法做静力学结构优化得到退火后的结构。由于FCC-CoCrCuFeNi高熵合金被认为是潜在的工程结构材料[1],接下来我们将对退火前后的结构进行压缩模拟,对比退火前后FCC-CoCrCuFeNi高熵合金的力学性能变化,敬请各位读者关注我们的更新。 阅读详情

相关推荐

abaqus 6.13安装(ubuntu 16.04LTS)

1。从iso将文件拷贝出来 2。chmod 777 -R ./* 给文件权限 3。sudo /home/xx/A/setup 4。安装licenseserver 5。拷贝lic,log文件 6。打开license sudo ./lmgrd -c path 7. 27011@xx or 27011@localhost ...

a1099313374的博客 1950

Dining (网络流)

题目链接:http://poj.org/problem?id=3281 题目大概: 一个农夫有食物和饮料来喂养n头牛,每头牛都有自己喜欢的食物和饮料,其他的不要,问最多养活几头牛。 思路: 模板来自大神 poursoul 这个网络流的题牛需要两样物品,也就是要匹配两个,可以把食物和饮料放到牛的两边,s--食物--牛--饮料--t,这样来建图,因为一头牛可能会走通两条路,为了限制一下,把牛

a1046765624的博客 393

银河麒麟系统完美安装EasyConnect

Kylin V10桌面版完美安装EasyConnect

weixin_53874797的博客 1万+

【USACO】Dining

【题目链接】【JZXX】点击打开链接【caioj】点击打开链接【算法】拆点+网络流【代码】#include&lt;bits/stdc++.h&gt; using namespace std; #define MAXN 1000 int i,tot,N,F,D,sf,sd,ans,x; int U[MAXN*5],V[MAXN*5],W[MAXN*5],Head[MAXN*5], Next[M...

even_bao的博客 312

uniapp [全端兼容] - 详细实现用户电子签名 “逐字校验“ 将姓名按字拆开分别手写签署签字,把客户名字自动拆成单独的文字并由用户逐个依次签名与汉字笔画校验,支持汉字格、田字格、米字格、方格等!

uniapp,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,手写签名,电子签署,逐个字挨着写,写名字,将客户姓名分成单独的文字并依次手写,在田字格里写名字,米字格,方格,合同,书写轨迹,验证手写的文字是否正确,如何在uni-app做姓名拆分成独立的文字后手写每一个字,校验正确性,画板,汉字生成在米字格里并且让用户去写,如何画一个汉字田字格,vue把姓名拆分单独写签名,文字,拆掉,中文汉字网格,一个字一个字签名,一次只签名一个文字,判断签名的文字笔画是否正确,Un

🏆 前端领域优质创作者 1万+

单片机应用案例:ESP32 搭配 BH1750 光强传感器和 Web 服务器

在该应用案例中,我们将使用 ESP32 开发板作为主控制器,BH1750 光强传感器用于采集环境光强度数据,并通过 Web 服务器展示采集到的数据。步骤一:购买材料步骤二:连接硬件步骤三:编写代码我们将使用 Arduino IDE 编写代码,以下是主要代码:// WiFi 设置const char* ssid = “你的 WiFi 名称”;const char* password = “密码”;// Web 服务器实例// BH1750 实例// 获取当前光强度数据。

RlDart的博客 812

POJ3281 Dining

POJ3281 Dining Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she will consume no others. Farmer John has cooked fabulous meals f...

ACMerszl的博客 275

高通Camx功能feature分析之一:remosaic功能导通

本文详细介绍了S5K3P9S传感器前置场景中SW Remosaic功能的实现流程。首先需在sensorxml中确认支持SW Remosaic类型,并集成remosaic相关库文件(libremosaic_wrapper.so等)。核心实现包括:初始化阶段调用InitFrontSamsungRemosaic();执行线程DeferFrontInitThread()读取校准数据;通过DoSamsungRemosaic()执行remosaic算法处理;最后在析构函数中调用DeinitFrontSamsungRem

1695

POJ 3281 Dining【Dinic】

POJ 3281 Dining 核心算法:网络最大流 大意:有n头牛,F种食物,D种饮料,第i头牛喜欢fi种食物,di种饮料,编号分别为。。。 已知一头牛最多能吃一种食物和一种饮料,每种饮料 或食物最多能被一头牛吃,求以上条件下,最多能有多少头 牛能吃到他所喜爱的食物和饮料 建立模型: 建立网络流模型:1.对每种食物建立从源点指向它的一条边,流量为1...

a48634331的博客 132

我用 Python 把 Claude 变成了 “代码审查员“:每次提交前 AI 先 Review,Bug 漏网率降了 80%

这是成败的关键。我们需要给 Claude 立规矩,让它像一个严格的架构师那样思考。你是一名资深的首席软件架构师和安全专家。请审查以下 Git Diff 代码变更。你的任务是:1. **安全性检查**:寻找 SQL 注入、XSS、硬编码密钥、敏感信息泄露等。2. **潜在 Bug**:空指针、资源未关闭、竞态条件、逻辑死循环。3. **代码质量**:命名规范、冗余代码、可读性差、缺乏注释。4. **性能优化**:不必要的数据库查询、低效算法。

BUG猿的博客 142

[Unity开发] [PICO]避坑指南:PICO商店上传APP时PXR Platform APPID设定详解

PICO开发者上传Unity应用时常见的"APPID不符"问题,主要源于混淆了开发者后台两个不同位置的APPID。

每日出拳老爷子的博客 555

POJ【3281】Dining(网络流)

题目链接:http://poj.org/problem?id=3281 分析 这道题的意思是有N头牛,F种食物和D种饮料,每头牛有自己喜欢的食物和饮料且只能选择一种食物和饮料,所有牛不能选择相同的食物和饮料,问最多有多少头牛能得到满足。这道题类似二分匹配,但又不全是,个人理解有点像将二分匹配转化为特殊的网络流的过程。以下是图的模型。 增加一个源点s和一个汇点t,将牛拆分成两份,源点指向食物,食物...

yj8023xx的博客 498

【机器学习|评价指标8】混淆矩阵(Confusion Matrix)、Cohen‘s Kappa 系数、详解,平均交并比(mIoU)、列联表(Contingency Table)附代码。

【机器学习|评价指标8】混淆矩阵(Confusion Matrix)、Cohen's Kappa 系数、详解,平均交并比(mIoU)、列联表(Contingency Table)附代码。

2401_89898861的博客 1424

解题报告 之 POJ3281 Dining

解题报告 之 POJ 3281 Dining 最大流 经典构图 牛吃草问题 食物 饮料 最大分配

JUST CODE 2327

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

POJ 3281-Dining(最大流)

思路:主要是如何建图,因为每头牛只能喂一次所以要拆点,我们吧图分成5部分 超级源点——>食物——>牛——>牛(拆点后每头牛连自己的内个点)——>水——>超级汇点。跑一遍最大流 #include <cstdio> #include <cstring> #include <algorithm> #include <set> #include<iostream> #include<vector> #includ.

Ray.C.L的博客 504

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

B - Dining[dinic+拆点]

B - Dining 题意大概是:一个大厨,有N头牛,每头牛都会有自己喜欢吃的饭菜和喜欢喝的饮料。现在大厨做了F份饭餐,D份饮料,只有同时有吃有喝的牛才会开心。然后问,最多有几头牛可以开心。 这道题的难度在于建图,还有想到拆点这一点。 先说怎么建图吧。 我们把牛放在中间,左边食物,右边饮品,进行连线。然后源点和汇点怎么找呢? 我们让源点与所有的是食物有一条边,让汇点与所有的饮品有一条边。这样子...

rain_island的博客 176

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

POJ-3281 Dining

题目链接:POJ-3281 Dining 题意 有$N$头牛,$F$个食物,$D$个饮料,每头牛有一定的喜好,只喜欢某几个食物和饮料,一头牛必须同时获得一个食物和一个饮料才能满足,问至多有多少头牛可以获得满足。 思路 流网络建图: 一头牛拆分成两个点$u$和$v$,这头牛喜欢的食物向$u$连边,$u$向$v$连边,$v$向这头牛喜欢的饮料连边; 源点$s$向每个食物连边,...

weixin_30699465的博客 123

Dining(最大流-拆点-EK算法-Dinic算法)

Dining(最大流-拆点-EK算法-Dinic算法) judge:POJ 3281 Time Limit: 2000MS Memory Limit: 65536K source:USACO 2007 Open Gold Description POJ 3281 Input POJ 3281 Output POJ 3281 Sample Input 4 3 3 2 2 1 2 3 1 2 2 ...

画船听雨眠 456

POJ 3281 Dining【拆点+SAP网络流】

POJ 3281 Dining 这里选择使用的是SAP网络流里的Dinic 题意:有n头牛,f个食物,d个饮料。每头牛都有一些自己喜欢的食物和饮料,当且仅当这头牛获得了一个自己喜欢的饮料和一个自己喜欢的食物,他才会开心。求,最多可能有多少牛会开心。每种食物和饮料只有一个。 一种解题思路:使用网络流,试图构建满流数量为答案的网络。 一种建图思路:超级源点S指向所有食物的边的权值为1,被喜欢的食物...

Irish_Moonshine的博客 347

[bzoj1711][Usaco2007 Open]Dining吃饭 最大流

时间就是生命,时间就是速度,时间就是力量。

Unlimited Code Works 256

bzoj1711[Usaco2007 Open]Dining吃饭*

bzoj1711[Usaco2007 Open]Dining吃饭 题意: 每头牛都喜欢几种食品和饮料,现在每种食品和饮料都有一个,问最多能使多少头牛同时获得喜欢的食品和饮料。牛数、饮料数、食品数≤500 题解: 最大流,源向所有食品连边,食品向被喜欢的牛连边,牛向喜欢的饮料连边,饮料向汇连边,流量都为1。 代码: 1 #include <cstdio> ...

anheku1562的博客 172

POJ - 3281 Dining 网络流

POJ - 3281 Dining 网络流 一、题意 POJ - 3281 Dining 农场里有n头牛,f种食物,n中饮料,每头牛有自己喜欢的食物和饮料类型,每种食物和饮料都只能分配给一头牛,现在为每头牛分配食物和饮料,求能同时得到自己想要的食物和饮料的牛的数量(每头牛最多只获得一种食物或饮料)? 二、解题思路 只是两个二分图匹配的问题,可以用网络流求解,可以如下建图: (1)...

Summer_via的博客 444

[USACO18DEC]Fine Dining

[USACO18DEC]Fine Dining 同步:https://buringstraw.win/index.php/archives/44/ https://hexo.buringstraw.win/2019/07/14/FineDining/ 咕咕咕。。。 什么?前几次考试? 。。。有空就补(放心你没空的) 题目 漫长的一天结束了,饥困交加的奶牛们准备返回牛棚。农场由N片牧场组成...

weixin_30782293的博客 128

【题解】poj3281 dining

poj3281 dining 网络流最大流 图文分析

Dark_Archon的博客 530
上一篇: Asteroids
下一篇: Slim Span
Techay
博客等级 码龄11年 11粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值