POJ 3281 Dining (巧妙建图+最大流)

解题报告:POJ 3281 Dining(最大流 / “三分图”建图) B.POJ 3281 DiningDiningDining(最大流/建图模板)【省选/NOI- 】 有 F 种食物和 D 种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一 种食物和一种饮料。现在有 N头牛,每头牛都有自己喜欢的食物种类列表和饮 料种类列表,问最多能使几头牛同时享用到自己喜欢的食物和饮料。( 1<=F<=100,1<=D<=100,1<=N<=100)1 <= F <= 100, 1<= D <= 100, 1 <= 阅读详情

http://poj.org/problem?id=3281
题意:Farmer John有 N N 头牛,F个食物, D D 个饮料。每头牛只喜欢某几种食物和某几种饮料。每个食物和饮料只能给一头牛,一头牛只能得到一个食物和饮料。而且一头牛必须同时获得喜欢的食物和喜欢的饮料才能满足。问至多有多少头牛可以获得满足。

一眼看不出是最大流问题,但是可以通过巧妙的建图转化成最大流问题,具体方法如下:
将每头牛分成两个点,一个点与喜欢的食物连边,一个点与喜欢的饮料连边,两个点之间再连一条容量为1的边,这样就可以保证每头牛都只选一个食物和一个饮料。然后所有食物与一个超级源点相连,所有饮料与一个超级汇点相连,连成一个像下面这样的图。
这里写图片描述
还要稍微注意的一点是编号问题,具体根据自己的习惯就好,我的编号方法是超级源点为0,食物是 1~F 1 ~ F ,牛的第一个点是 F+1~F+N F + 1 ~ F + N ,牛的第二个点是 F+N+1~F+N+N F + N + 1 ~ F + N + N ,饮料是 F+N+N+1~F+N+N+D F + N + N + 1 ~ F + N + N + D ,超级汇点是 F+N+N+D+1 F + N + N + D + 1 ,具体看代码注释吧。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define INF 0x3f3f3f
using namespace std;

const int maxn=100100;
int head[maxn],dis[maxn],k,n,D,F;
struct edge{
    int v,c,next;
}e[maxn];
void addedge(int u,int v,int c)
{
    e[k].v=v;e[k].c=c;e[k].next=head[u];head[u]=k++;
    e[k].v=u;e[k].c=0;e[k].next=head[v];head[v]=k++;
}

int bfs(int s,int t)
{
    memset(dis,0,sizeof(dis));
    dis[s]=1;
    queue<int> q;
    q.push(s);
    while(!q.empty())
    {
        int u=q.front();
        q.pop();
        for(int i=head[u];i!=-1;i=e[i].next)
        {
            int v=e[i].v;
            if(!dis[v]&&e[i].c)
            {
                dis[v]=dis[u]+1;
                if(v==t) return 1;
                q.push(v);
            }
        }
    }
    return 0;
}

int dfs(int u,int a,int t)
{
    if(u==t) return a;
    int res=0;
    for(int i=head[u];i!=-1;i=e[i].next)
    {
        if(!a) break;
        int v=e[i].v;
        if(e[i].c&&dis[v]==dis[u]+1)
        {
            int f=dfs(v,min(a,e[i].c),t);
            if(f>0)
            {
                e[i].c-=f;
                e[i^1].c+=f;
                res+=f;
                a-=f;
            }
            else
                dis[v]=-1;
        }
    }
    return res;
}

int dinic(int s,int t)
{
    int res=0;
    while(bfs(s,t))
    {
        res+=dfs(s,INF,t);
    }
    return res;
}

int main()
{
    int x,y,a,b;
    while(~scanf("%d%d%d",&n,&F,&D)){
        memset(head,-1,sizeof(head));
        for(int k=1;k<=n;k++)
        {
            scanf("%d%d",&x,&y);
            for(int i=1;i<=x;i++)
            {
                scanf("%d",&a);
                addedge(a,k+F,1);//食物与牛的第一个点连边
            }
            for(int i=1;i<=y;i++)
            {
                scanf("%d",&b);
                addedge(k+F+n,b+F+n+n,1);//牛的第二个点与饮料连边
            }
            addedge(k+F,k+F+n,1);//牛的第一个点与第二个点连边
        }
        for(int i=1;i<=F;i++)
            addedge(0,i,1);//食物与超级源点连边
        for(int i=1;i<=D;i++)
            addedge(i+F+n+n,F+n+n+D+1,1);//饮料与超级汇点连边
        printf("%d\n",dinic(0,F+n+n+D+1));
    }
    return 0;
}
一分钟了解 Claude Code 在 AI 编程工具百花齐放的 2026 年,凭借其终端原生、全项目理解、自主执行的核心能力,开辟了全新赛道。它不是要替代你的 IDE 或编辑器,而是成为你最强大的终端扩展,让你在熟悉的环境中,用自然语言驱动开发,专注创意,而非琐事。 阅读详情

相关推荐

【PLL】分频器设计权衡:从CMOS到CML的电路实现与优化

本文深入探讨了PLL中分频器的设计权衡,比较了CMOS和CML两种电路实现的优缺点。通过实际案例分析,展示了如何在速度、功耗和噪声之间取得平衡,特别是在5G射频芯片和Wi-Fi 6E等高频应用中的优化实践。文章还提供了混合架构设计和电源噪声协同优化的实用技巧,适合电路设计工程师参考。

weixin_42521843的博客 442

AI产业成熟期的三大标志:营收、并购与人才战

人工智能已从技术探索阶段迈入商业落地深水区,其核心标志不再是模型参数或推理速度,而是可验证的AI Revenue(AI营收)、战略导向的M&A(并购)以及T型复合型人才的系统性短缺。这一转变源于基础设施成本坍塌、全球合规框架落地与企业客户认知升级三重驱动,推动AI价值衡量标准从‘能否实现’转向‘是否划算’。在金融、制造、医疗等垂直领域,真正被采购的不再是通用大模型,而是能嵌入ERP/MES/HIS等核心系统、支持业务归因与合规审计的端到端AI能力。本文聚焦AI产业生命周期中的‘成熟临界点’,解析营收结构范式

dengliugong3918的博客 501

Diebold-Mariano检验

给定两个预测的预测结果,我们希望比较他们的预测结果,以用于预测模型精度的比较。 Diebold-Mariano检验本质是一个t检验,用于检验替代预测的两个损失序列的平均值是否相等。即,它是一系列损失差的零均值的t检验。在存在自相关的情况下,它使用损失差分时间序列标准差的自相关一致性估计。 注意,在使用DM检验式时,假设损失序列是平稳的。 另外,DM检验在小样本数据时往往会拒绝零假设。对于小样本数据,推荐Harvey, Leybourne and Newbold (HLN)检验【1】; 参考文献 【1】htt

weixin_43948357的博客 6565

POJ 3281 Dining(最大流)

  传送门 题意:有N头牛,每个牛都有自己喜欢的food和drink的type,但是对于food和drink,每个type都只有一个,现在问最多能让多少牛满意.   最大流裸题,将food和drink的每个type作为点放在两端,将牛放在中间,将牛拆出两个点,一个点连接左边的food一个点连接右边的drink,将源点与次源点相连,次源点与所有food相连,汇点与所有drink相连,每个...

喵喵喵? 316

基于Python的网络拓扑图绘制

最近写论文画了许多图,在这里记录一些。当然,如果仅仅是展示性图片的话也可以使用visio,但是这里我仍然想探究一下如何使用pyhon画出美观的网络拓扑图。(1)根据邻接矩阵画出网络拓扑图(2)画出网络拓扑图,并对节点和链路进行表示,包括对节点和链路的标号,颜色区分,以及尺寸区分。

m0_53961910的博客 7093

北斗三号PPP-B2b信号实战指南:从接收机配置到精度验证全流程

本文提供了北斗三号PPP-B2b信号从硬件配置到数据处理的全流程实战指南。详细解析了信号特性、接收机关键参数设置,并以飞纳接收机和Mass软件为例,演示了数据解算与精度验证方法。通过覆盖中国多地区的联调测试案例,验证了PPP-B2b服务可实现分米级实时定位精度,为无网络地区高精度应用提供了可靠解决方案。

nn3456的博客 554

POJ.3281 dining 最大流+拆点

POJ.3281 dining 最大流+拆点 思路清晰为啥一直WA呢 #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; #include &lt;queue&gt; #include &lt;cstdio&gt; #define maxn 400...

Vicente的博客 228

蒙特卡洛+概率潮流!基于蒙特卡洛和新能源出力模拟的概率潮流分布程序代码!

最后,导出光照强度、风速、网损和节点电压的概率分布图,并计算了各节点电压和网损的平均值和方差,展示了接入前后的节点电压对比图。在不确定性增加的电力系统中,概率潮流成为含随机因素规划问题的求解前提,可以更加真实地反映电力系统的全面信息。此外,概率潮流还可用于研究风电和光伏发电出力以及电动汽车消耗功率和向电力系统反向供电功率的不确定性对电力系统的影响,发现系统运行中的潜在风险,为系统运行控制提供参考。概率潮流的目的是揭示电网中随机变量对系统的影响,发现电网中的薄弱环节,为规划和调度部门的决策提供有价值的信息。

weixin_48747334的博客 1920

POJ 3281 Dining(网络流经典构图)

  题目链接 题目大意:农夫John有N头牛,每头牛都有自己喜欢的食物和水的种类,一共有F种食物和D种水,现在让你来进行分配,每种食物或水只能分配给一头牛,并且每头牛只能得到一种食物和一种水,问最多能使几头牛同时享用到自己喜欢的食物和饮料。(1 &lt;= N &lt;= 100, 1 &lt;= F &lt;= 100, 1 &lt;= D &lt;= 100) 分析:这题第一反应很容易往...

不期而遇 320

Python爬虫技术:使用Playwright和Twitter API v2高效获取Twitter/X数据完全教程

遵守规则:始终遵循Twitter的使用条款和速率限制错误处理:实现完善的错误处理和重试机制数据质量:进行数据清洗和验证性能优化:使用异步处理和合理的延迟设置可维护性:模块化代码,便于维护和扩展。

2201_76125261的博客 671

fastlio2原理详解

其核心是利用IMU的高频数据(通常100-500Hz)进行状态预测(前向传播),同时利用激光雷达扫描(通常10-100Hz)作为观测来校正状态。转换了卡尔曼增益的计算公式,将对大维度观测矩阵的求逆(点云数量级)转换为对小维度状态矩阵的求逆,从而极大提升了计算效率。:利用预测出的连续IMU状态,将一帧内每个激光点根据其时间戳反向插值,统一校正到扫描结束时刻,输出无畸变的点云。收敛后,用最终的状态将本帧点云。,根据其精确的时间戳,利用前后两个IMU位姿进行插值,计算出该点采集时刻的精确位姿,再将其全部。

Studying…… 102

POJ3281,Dining(二分匹配)

不难看出,这道题属于网络流的二分匹配应用,不过,在建模的时候要小心注意一点。此题当中有两个二分图,分别是1 ~ n->1 ~ f, 1 ~n -> 1 ~ d,建模要把两个二分图给联系,同时应建模过程中要注意,保持每个food和drink只能选一次以及每只cow只能挑选一次的特点。 本人所建立的网络模型是,引入源点与汇点s=0,t=f+2n+d+1,以及四个点集V1,V2,V3,V4,...

shamansi99的博客 214

【毕设级教程】从0到1实现基于YOLOv8的xView卫星图像目标检测系统(含UI界面,助力遥感智能毕设)

本文基于YOLOv8模型设计了一个面向xView卫星图像的目标检测系统。首先对xView数据集进行了格式转换处理,将原始多边形标注转换为YOLO格式的边界框标注。随后通过配置YOLOv8模型参数完成训练,实现了对卫星图像中建筑、车辆等多类目标的准确识别。为提高系统交互性,采用PyQt开发了可视化界面,支持图像选择、实时检测和结果展示功能。整个系统兼顾学术价值和实用价值,为遥感领域的自动化目标检测提供了可行方案。

m0_64661770的博客 130

文章标题 POJ 3281 : Dining (最大流+巧妙建图)

题目链接 题意:有N只牛,每只牛有自己喜欢的食物和饮料,现在有F种食物和D种饮料,然后每一种饮料和每一种食物只能由一只牛享用,然后要我们求,怎么分配这些食物和饮料,使得尽可能多的牛能同时得到一种饮料和一种食物。 分析:巧妙的建图方式,把食物和饮料放在两端。一头牛拆分成两个点,两点之间的容量为1.喜欢的食物和饮料跟牛建条边,容量为1. 加个源点和汇点。源点与食物、饮料和汇点的边容量都是1,表示每

Wang_SF2015的博客 363

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

POJ 3281-Dining(最大流)

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

Ray.C.L的博客 507

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

POJ 3281 Dining【Dinic】

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

a48634331的博客 133

POJ 3281Dining(网络流之最大流)

题目地址:

scf0920 1334

POJ-3281 Dining

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

weixin_30699465的博客 123

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

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

Irish_Moonshine的博客 347

POJ【3281】Dining(网络流)

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

yj8023xx的博客 498

POJ-3281 Dining-最大流-多对一匹配

题目链接:http://poj.org/problem?id=3281 题意:给你n头牛,F种吃的,D种喝的,每头牛对某些吃的喝的情有独钟,每种吃的 和 喝的 只能给一头牛,一头牛只能得到一 种吃的一种喝的,而且一头牛必须同时获得吃的和喝的 才能被满足 问最多有多少头牛可以满足 一个最大流模板题,不过建图容易出错,需要注意的是牛需要拆点就行了。 是一个二分匹配问题,不过是两个条...

zx93的博客 311

poj 3281 Dining //顶点限流(最大流)

http://poj.org/problem?id=3281 poj 3281 Dining //顶点限流(最大流) Dining Time Limit:2000MS Memory Limit:65536K Total Submissions:24520 Accepted:10819 Description Cows are such...

Rshs 245

【题解】Dining POJ - 3281 ⭐⭐⭐ 【拆点 最大流】

Dining POJ - 3281 农夫为他的 N (1 ≤ N ≤ 100) 牛准备了 F (1 ≤ F ≤ 100)种食物和 D (1 ≤ D ≤ 100) 种饮料。每头牛都有各自喜欢的食物和饮料,而每种食物或饮料只能分配给一头牛。最多能有多少头牛可以同时得到喜欢的食物和饮料? Input 第一行输入三个整数N, F, D 接下来n行,每行先输入两个整数 Fi 和 Di,分别表示编号为 i ...

Suprit's blog 836

POJ-3281(最大流+EK算法)

Dining POJ-3281 这道题目其实也是网络流中求解最大流的一道模板题。 只要建模出来以后直接套用模板就行了。这里的建模还需要考虑题目的要求:一种食物只能给一只牛。 所以这里可以将牛拆成两个点,一个点和食物匹配,另一个点和饮料匹配。另外增加一个源点和一个汇点。最后根据题目的输入来连边就可以了。容量统一设置为1. #include<iostream> #includ...

262

POJ - 3281 Dining(最大流+思维建边)

题目链接:点击查看 题目大意:给出n头奶牛,f种食物,d种饮料,每只奶牛可以选择数种食物和饮料,但每种食物和饮料只有一份,现在问最多能让多少头奶牛同时满足食物和饮料的条件 题目分析:最大流的题目,不过建图是真的神奇,一开始我是想将奶牛拆点,拆成饮料点和食物点,然后源点连到食物+饮料,奶牛点连到汇点,但食物饮料和奶牛之间不会建边,然后就卡住了 我们必须从题目入手,首先关键信息是: 每一头满足...

Falcon的博客 342
上一篇: POJ 1273 Drainage Ditches (最大流模板题)
下一篇: hdoj 4280 Island Transport (最大流)
sdxtcqs
博客等级 码龄11年 8粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值