poj 3281 网络流Dinic算法

钣金件设计规范 为保证折弯 强度,钣金折弯钣金应大于材料的最小折弯半径。在设计U型弯曲件时,两弯曲边最好长度相等,以免弯曲时产品偏 移而产生废品,如果因为结构设计不允许两边一样长,为保证产品在模 具中准确定位,应预先在设计时添加工艺定位孔,特别是多次折弯成 形的零件,必须设计工艺孔为定位基准,以减少累计误差,保证产品 质量,如图2-11所示。凸包是依靠材料的延伸使钣金件形成局部凹陷或凸起的冲压工序凸包与拉深是完全不同的冲压工艺,凸包中材料厚度的改变为费意图性 的,即厚度的少量改变是变形过程中形成的,不是设计指定的要求。 阅读详情

Dining
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 10184 Accepted: 4682

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  Fiintegers 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

Hint

One way to satisfy three cows is: 
Cow 1: no meal 
Cow 2: Food #2, Drink #2 
Cow 3: Food #1, Drink #1 
Cow 4: Food #3, Drink #3 
The pigeon-hole principle tells us we can do no better since there are only three kinds of food or drink. Other test data sets are more challenging, of course.

Source


Dinic算法,每次先用bfs构造层次网络,dfs按层次增广下去,直到无法在增广下去(即汇点t的最短距离改变了)重新bfs构造层次网络。算法直到s-t没有路径为止。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

#define maxn 405
#define maxm maxn*maxn
int n,f,d;

struct edge
{
    edge(int a, int b, int c){ to = a; cap = b; rev = c;}
    int to, cap, rev;
};

vector<edge> g[maxn];
void add(int u, int v)
{
    g[u].push_back(edge(v, 1, g[v].size()));
    g[v].push_back(edge(u,0, g[u].size()-1));
}


int cur[maxn];
int level[maxn];
void bfs(int s)
{
    memset(level, -1, sizeof(level));
    level[s] = 0;
    queue<int> que;
    que.push(s);
    while(!que.empty()){
        int u = que.front(); que.pop();
        for(int i = 0; i < g[u].size(); i++){
            int v = g[u][i].to, cap = g[u][i].cap;
            if(level[v] == -1 && cap > 0){
                level[v] = level[u]+1;
                que.push(v);
            }
        }
    }
}

int dfs(int u, int t, int f)
{
    if(u == t || f == 0) return f;

    for(int &i = cur[u]; i < g[u].size(); i++){
        int v = g[u][i].to, &cap = g[u][i].cap, rev = g[u][i].rev;
        int d = 0;
        if(level[v] == level[u]+1 && cap > 0){
            d = dfs(v, t,min(cap, f));
            if(d > 0){
                cap -= d;
                g[v][rev].cap += d;
                return d;
            }
        }
    }

    return 0;
}
int dinic(int s, int t)
{
    int max_flow = 0;
    while(1){
        bfs(s);
        if(level[t] < 0) return max_flow;
        memset(cur, 0, sizeof(cur));
        int f;
        while((f = dfs(s, t, 0x3f3f3f3f))) max_flow += f;
    }
}

int main()
{
    while(~scanf("%d %d %d", &n, &f, &d)){
        for(int i = 0; i < maxn; i++) g[i].clear();
        int s = 0, t = 2*n+f+d+1;
        int v,fc, dc;
        for(int i = 1; i <= n; i++){
            add(f+i,f+n+i);
            scanf("%d%d", &fc, &dc);
            for(int j = 0; j < fc; j++){
                scanf("%d", &v);
                add(v, f+i);
            }

            for(int  j= 0; j < dc; j++){
                scanf("%d", &v);
                v += f+2*n;
                add(f+n+i, v);
            }
        }

        for(int i = 1; i <= f; i++)
            add(s, i);
        for(int i = f+2*n+1; i <= f+2*n+d; i++)
            add(i, t);


        printf("%d\n", dinic(s,t));
    }
    return 0;
}




第33次CCF-CSP认证考试 第一题 词频统计 满分题解 本人小白一枚,抱着学习的态度想到网上找一些csp的参考答案,但由于实力有限,大佬的代码大都看不太懂,于是萌生了想用一些简单,基础的语句完成csp前两题的想法并公开,以便与像我这样实力不强的同学交流学习,如有更好的建议,还请斧正,感谢! 阅读详情

相关推荐

brpc组件bvar源码解析(一)简介、使用和类的关系

bvar是brpc中的一个重要组件,brpc内部有很多builtin监控都是bvar实现的。 brpc文档介绍bvar“几乎不会给程序增加性能开销,也快于竞争频繁的原子操作”。它的原理是:多线程累加一个计数器时,每个线程只累加私有的变量而不参与全局竞争,因此写时没有锁的竞争;在读取时累加所有线程的私有变量。虽然读比之前慢多了,但写就快多了,因此它使用写多读少的场景,例如统计、监控场景。 1.使用 // bvar::Adder<T>用于累加,下面定义了一个统计read error总数的Adder。

华秋实的专栏 1851

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 for his cows, but he forgot to check his me...

Hugokung的博客 518

别再为PT100测温发愁了!手把手教你用ADS1247+STM32搞定高精度温度采集(附完整代码)

本文详细介绍了如何使用ADS1247与STM32构建高精度PT100测温系统,涵盖硬件设计、SPI配置、温度计算及调试技巧。通过24位ADC和内置PGA,实现0.1℃级精度,适用于工业自动化和医疗设备。附完整代码和常见问题解决方案,助你快速掌握高精度温度采集技术。

weixin_42524703的博客 343

POJ-3281 Dining【网络流】【最大流】【dinic】

题目 POJ-3281 题意 n只牛,f种食物,d种食物,每只牛都有喜欢的食物和饮料,每头牛都有各自喜欢的食物和饮料,每种食物或饮料只能分配给一头牛。问最多能有多少头牛可以同时得到喜欢的食物和饮料。(每头牛只吃一份食物和饮料) 题解 建一个像下面的图求最大流(边权都为1) 主要讲下为什么要把每只牛拆开成两部分 如果不拆的话会建立如下的图,这样子求出的最大流为2,因为一只牛吃了两份食物饮料,把牛拆开来限制了一只牛只能吃一份食物饮料 代码 /* * @author: arc * @date: 2020-

weixin_43895356的博客 276

Y-Branch and a closed y-branch loop

双臂后面的区域,我们将它的双臂使用一个波导进行了连接,使得它本身形成了一个闭合回路,因此,该结构被称作。它们均是用来对经过它们的光束能量进行分割的一种器件。首先,我们知道一点,在光波导层面,今天给大家介绍一下,什么是。

u011699626的博客 628

刚体转动欧拉方程:从理论到卫星姿态控制的实践

刚体转动欧拉方程是描述刚体旋转运动的基本动力学方程,在卫星姿态控制、机器人学、航空航天等领域有着广泛应用。本文将详细讲解欧拉方程的物理概念、数学推导、数值计算方法,并重点分析其在卫星姿态控制系统中的具体应用。

ScilogyHunter的博客 642

POJ - 3281 (Dining)

题意:有 N 头牛,F种食物和D种饮料,每头牛都有喜欢的食物集合和饮料集合,如果在两个集合中分别任选一个就可以让这头牛满意,现给出N头牛的喜爱的食物和饮料集合,求F种食物和D种饮料每个只有一份的情况下最多能满足牛的数量; 分析:网络流建图,设 0 为源点,1~F 为食物的种类编号,F+1~F+D为饮料的种类编号,F+D+2*i-1~F+D+2*i 为第i头牛的编号(后面解释为什么一头牛需要...

Joker & Liar的博客 294

什么是DHCP Snooping?如何配置DHCP Snooping?

功能描述防护类型防御伪造 DHCP 服务器、避免地址冲突、增强网络安全性使用场景企业园区网、校园网、大型局域网配合机制IP Source Guard、DAI、防止 ARP 欺骗部署难度⭐⭐(简单)“DHCP Snooping,是内网 DHCP 安全防护的第一道门神。” 🛡️。

网络技术联盟站 1266

poj3281 网络流

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...

qq_40859951的博客 269

【PCIe EP 设备入门学习专栏 -- 8 PCIe EP 架构详细介绍】

Synopsys PCIe 5.0 EP 架构由多个功能模块组成,整体遵循分层 + 模块化设计CXPL(事务层 + 链路层 + 物理层 MAC)XADM(仲裁/生成)、XAIM(应用接口)RADM(过滤/路由/Completion)CDM(配置空间)、PMC(电源管理)、LBC/DBI(寄存器访问)MSG_GEN(消息)、CXS(多芯片一致性)

CodingCos的博客 381

AI在智能制造中的落地:从预测维护到自适应生产调度

从最新的研究与实践来看,“预测维护”和“自适应生产调度”正在成为智能制造中最先跑通闭环的两个核心场景:前者通过对设备健康的前瞻性预测,帮助企业减少非计划停机、优化备件与维护资源;后者通过对复杂生产系统的实时决策优化,使工厂能够更好地应对订单波动、设备故障和多目标约束。更重要的是,越来越多的研究与项目不再将二者视为孤立模块,而是尝试构建“设备健康—生产调度—供应链”三者联动的一体化架构。Nature在技术层面,深度学习、强化学习、多智能体系统、图神经网络和注意力机制等方法,为建模复杂工业系统提供了强大工具;

nmdbbzcl的博客 1290

POJ - 3281 -- Dining

题目来源:http://poj.org/problem?id=3281 网络流建图,最大流问题。 边的方向为:s-&gt;食物-&gt;牛-&gt;牛-&gt;饮料-&gt;t。 将牛拆成两个顶点,之间连一条容量为1的边,这样避免了一头牛杯分配多组食物和饮料的方案,计算出图中的最大流即可。 代码: #include &lt;iostream&gt; #include &lt;cstri...

No cost too great! 249

初学者入门YOLO目标检测:从懵圈到上手,这篇文章讲透所有核心(附学习路径+避坑指南)

目标:比如训练一个“检测苹果和橘子”的模型,或者“检测人脸”的模型;任务:学会用LabelImg标注数据,制作YOLO格式的数据集,用命令行训练模型;关键:不用追求高精度,能训练出一个能检测出目标的模型就行。很多初学者卡在入门阶段,不是因为智商不够,而是因为“想太多,做太少”——总觉得要把所有原理搞懂才能动手,结果越想越怕,最后放弃。先动手,再动脑。先跑通一个案例,获得成就感;再制作自定义数据集,训练简单模型;最后再回头去理解原理,优化模型。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 688

POJ 3281 网络流dinic算法

B - Dining Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status Practice POJ 3281 Appoint description: Description Cows are such finick...

weixin_30532973的博客 102

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Devexpress16.2.6破解工具

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

POJ3281 Dining【网络流/点的限制/拆点】

题目链接:POJ3281 Dining 题意:f个食物和d个饮料,分别有自己的编号,n个奶牛吃到自己想要的食物和饮料才会开心,求最多多少奶牛开心; 分析:对奶牛而言有1的上限,对奶牛拆点建边,流量为1(注意点的编号); #include<cstdio> #include<cstdlib> #include<iostream> #include<cm...

MaJorieL 213

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

poj3281

poj3281根本想不到了网络流题,把牛拆点,如图方式建图,然后跑网络流 #include<iostream> #include<cstdio> #include<queue> #include<algorithm> #include<cmath> #include<ctime> #includ...

weixin_30407613的博客 105

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

网络流Dinic

很久前学过增广路算法,今天学习了它的优化Dinic,原理是在dfs前先将残量网络用bfs进行分层,dfs时只往下一层搜索,详细见代码…… POJ3281 拆点+建图+网络流 把每头牛拆成两个点,建立超级源点S和汇点T,S->菜->牛->牛’->饮料->汇点。注意不要建重边!!!#include <cstdio> #include <queue> #include <algorithm> #in

Moon1125666900的博客 453

[POJ 3281] Dining (网络流入门)

POJ - 3281 有 N头牛,F种食物,D种饮料 每种食物和饮料都只有一份 每头牛都只食用固定的几种食物和饮料 问如何安排使得尽量多的牛同时有食物和饮料 这题算是网络流入门题 + 试板题了 刚开始想得太简单了, 从源点向每个食物连容量为 1的边 从每个饮料向汇点连容量为 1的边 然后对于每头牛,从它喜欢的食物向它连一条容量为 1的边 然后再从它向它喜欢的饮料连一条

MisDeer's blog 404

poj 3281 Dining

题目链接:poj 3281 题意:   有N头牛,F种食物可以制作,D种饮料可以制作   然后每行代表一头牛的喜好,开头两个数fi,di表示这头牛喜欢fi种食物,di种饮料,接下来fi个数表示喜欢的食物编号,di个数表示喜欢的饮料的编号   现在主人使用最优决策制作出F种食物和D种饮料,问怎么喂才能使尽可能多的牛喂饱(喂饱=一份食物一份饮料,且一头牛最多消耗一份食物和一份饮料)  输出最多喂饱的...

Jiandong 204

POJ3281

题目链接:http://poj.org/problem?id=3281 题目大意: 有F中食物D种饮料,每种食物或饮料只能分配给一头牛。最多能有多少头牛可以同时得到喜欢的食物和饮料 思路: 因为要使每头牛斗要有食物和饮料,而且为了分给尽可能多的牛,所以也就是一头牛最好分得一种食物和饮料,在牛和牛之间要建立一个传递,使得容量为1 ,也就变成要求食物为1了,在进入汇点时也要对应成每种饮料一条边

jn_8316的博客 508

poj 3281 最大流建图

题目链接:http://poj.org/problem?id=3281 #include <cstdio> #include <cmath> #include <algorithm> #include <iostream> #include <cstring> #include <queue> #incl...

weixin_30633405的博客 74

POJ 3281 Dining(最大流+拆点)

题目链接:http://poj.org/problem?id=3281 题目大意:农夫为他的 N (1 ≤ N ≤ 100) 牛准备了 F (1 ≤ F ≤ 100)种食物和 D (1 ≤ D ≤ 100) 种饮料。每头牛都有各自喜欢的食物和饮料,而每种食物或饮料只能分配给一头牛。最多能有多少头牛可以同时得到喜欢的食物和饮料? 解题思路:令st=0为源点,en=f+2*n+1为汇点,...

weixin_30301183的博客 119

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

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

zx93的博客 311

POJ 3281 Dining (网络流)

POJ 3281 Dining (网络流) 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 co...

weixin_30875157的博客 69

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 3494 dp+单调栈
下一篇: zoj 3699 单调队列
HuanTongH
博客等级 码龄12年 7粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值