POJ3281 Dining (SAP+GAP)

从CentOS迁移到openEuler 24.03 LTS:手把手教你部署Java+MySQL+Redis+Nginx全栈环境 本文详细指导如何从CentOS迁移到openEuler 24.03 LTS,并部署Java+MySQL+Redis+Nginx全栈环境。涵盖系统配置、软件安装、性能优化及环境验证,助力企业级用户高效完成服务器迁移与部署。 阅读详情

题目大意:农夫FJ的农场有一批奶牛,奶牛有自己喜爱的food和drink,FJ要计划一个策略,使得让尽可能多的牛匹配自己喜欢的food和drink,每种food和drink只能被分配一次,每头奶牛只能选择一种food和drink

思路:因为不是两个对象之间的匹配,所以不是最大匹配。是多个源点和多个汇点问题,所以可建立超级源点和超级汇点,从而利用网络流求最大流。sap~~79ms撸过~~把cin改掉应该能0ms吧~~嘿嘿

为了满足每头牛一个food和一个drink,要把牛拆开,其中的连线容量为1,我的图:0---->food----->牛前------->牛后------->drink----->f+2*n+d+1

 

 AC program:

#include<iostream>
#include<stdio.h> 
#include<string.h> 
#include<math.h>
#include<queue>  
#include<algorithm>
using namespace std;
#define inf 1000000000
#define maxn 450
#define maxm 21000  //note!! 如果RE就是这里出的原因 
int num;//note1 
int n,f,d;
struct node
{
  int c,next,to;       
}e[maxm]; //note2 
int box[maxn];//链式前向星 
void addee(int u,int v,int w)
{
    e[num].to=v;
    e[num].c=w;
    e[num].next=box[u];
    box[u]=num++;   
}
void init1()
{
  int u,v;
  for(int i=1;i<=f;i++)
  {
     u=0;v=i;
     addee(u,v,1);
     addee(v,u,0); 
      
  }       
}
void init2()
{
  int u,v; 
  for(int i=f+2*n+1;i<=f+2*n+d;i++)
  {
      u=i;v=f+2*n+d+1;
      addee(u,v,1);
      addee(v,u,0);        
  }     
}
void init3()
{
    int u,v;
    for(int i=f+1;i<=f+n;i++)
    {
       u=i;v=n+i;
       addee(u,v,1);
       addee(v,u,0);        
    }     
} 
void init4(int p)
{
  int ff,dd;
  cin>>ff>>dd;
  int food,drink;
  int u,v; 
  while(ff--)
  {
     cin>>food;
     u=food;
     v=f+p;
     addee(u,v,1);
     addee(v,u,0); 
             
  }    
  while(dd--)/// 
  {
      cin>>drink;
      u=f+n+p;v=f+n*2+drink;
      addee(u,v,1);
      addee(v,u,0);       
  }
}
int sap(int start,int end,int nnn)
{
  int numh[maxn],h[maxn],cur[maxn],pre[maxn];
  int cur_flow,flow_ans=0,u,tmp,neck,i;
  memset(h,0,sizeof(h)); 
   memset(numh,0,sizeof(numh));///
     memset(pre,-1,sizeof(pre));///
  for(int i=1;i<=nnn;i++)
     cur[i]=box[i];
  numh[0]=nnn;
  u=start;
  while(h[start]<nnn)
  {
      if(u==end)
      {
          cur_flow=inf;
          for(i=start;i!=end;i=e[cur[i]].to)
          {
              if(cur_flow>e[cur[i]].c)
              {
                neck=i;
                cur_flow=e[cur[i]].c;                        
              }                                  
          }
          for(i=start;i!=end;i=e[cur[i]].to)
          {
            tmp=cur[i];
            e[tmp].c-=cur_flow;
            e[tmp^1].c+=cur_flow;                                  
          }
          flow_ans+=cur_flow;
          u=neck;          
      }
      for(i=cur[u];i!=-1;i=e[i].next)
          if(e[i].c&&h[u]==h[e[i].to]+1) 
             break;
      if(i!=-1)
         {
               
           cur[u]=i;
           pre[e[i].to]=u;
           u=e[i].to;      
         }
      else
          {
            if(0==--numh[h[u]])break;
            cur[u]=box[u];
            for(tmp=nnn,i=box[u];i!=-1;i=e[i].next)
                if(e[i].c)
                    tmp=min(tmp,h[e[i].to]);
            h[u]=tmp+1;
            ++numh[h[u]];
            if(u!=start)u=pre[u];                 
                           
          } 
                                       
                        
  } 
  return flow_ans; 
} 
int main()
{
while(cin>>n>>f>>d)
{
  num=0;
  memset(box,-1,sizeof(box)); 
  init1();//超级源点和food
  init2();//超级汇点和drink
  init3();//牛和牛自身 
   for(int i=1;i<=n;i++)
  {
       init4(i); //牛前和food,牛后和drink      
  }     
  int love;
  love=sap(0,f+n*2+d+1,f+n*2+d+2);//f+n*2+d+2个点 
  printf("%d\n",love);                                         
} 
//system("pause"); 
return 0;} 


 

STM32 IIC电量计LTC2944 LTC2944是一款电池电量计,设计用于端电压为3.6V至60V的多节电池。它测量电池充电和放电、电池电压、电流和自身温度。精密模拟库仑计数器通过电池正极端子与负载或充电器之间的检测电阻器对电流进行积分。电池电压、电池电流和硅温度由内部ADC测量。 阅读详情

相关推荐

STM32内存大小与地址的对应关系以及计算方法

1、概述 在计算机中要访问存储区,都是通过地址来进行访问的,包括所有的外设(比如串口、内存、硬盘等),都对应有一个访问地址,地址就相当于门牌号,有了门牌号,我们才知道操作的是哪一个区域、哪一个外设。 最被大家熟知的是计算机内存,计算机内存有4G、8G,16G等等,对于程序员而言,要在代码中操作这些内存,肯定得知道内存的地址,此外,还需要会计算地址与内存大小的计算方法与对应关系。STM32作为微

Ace's Blog 4万+

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

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

Irish_Moonshine的博客 347

Adversarial Texture for Fooling Person Detectors in the Physical World

本文提出了对抗纹理的想法(AdvTexture),与基本补丁攻击不同对抗纹理可以生成任意大小,可以覆盖任意大小的不了,并且纹理的任何局部都有对抗性的效果。当衣服被对抗纹理覆盖是,摄像头捕捉到的每一个局部区域都可以攻击探测器,这成功解决了片段缺失的问题。提出了一种两阶段生成方法:基于环形收割的可扩展生成攻击(TC-EGA)来制作广告纹理。第一阶段,训练一个全卷积网络FCN作为生成器,通过采样随机潜变量作为输入来产生纹理(不同于GAN中传统的生成器架构,每一层都使用卷积运算)......

weixin_49171105的博客 1067

poj 3281 Dining (最大流解决匹配问题)

题目大意:有F种食物,D种饮料,N头奶牛,只能吃某种食物和饮料(而且只能吃特定的一份)一种食物被一头牛吃了之后,其余牛就不能吃了 要求输出最多分配能够满足的牛的数量 题解:解题思路:建图,有2*n+f+d+2个顶点,0表示源点,2*n+f+d+1表示汇点,由源点指向食物,再由食物指向牛,牛再指向对应的饮料,饮料再指向汇点 当然要使每一头牛都对应每一份食物与饮料,所以应该牛i指向牛i再指向饮料

Ezereal的博客 536

C#上位机与MES系统数据对接:从协议选型到安全传输的实战解析

本文详细解析了C#上位机与MES系统数据对接的全过程,从协议选型到安全传输的实战技巧。针对工业互联网场景下的数据对接挑战,提供了RESTful API、MQTT和OPC UA等协议的选型建议,并分享了健壮性设计、异常处理和安全传输的实用代码示例,帮助开发者高效实现数据上传与系统集成。

weixin_30566063的博客 105

Flutter版本升级踩坑实录:从3.27到3.35,我们是如何修复Impeller引擎导致的花屏问题的?

本文详细记录了团队在Flutter版本升级过程中遇到的Impeller引擎导致的花屏问题及解决方案。从问题诊断到最终升级至稳定版3.35,文章分享了排查步骤、升级策略和性能对比数据,为开发者提供了实用的参考经验。

weixin_26854555的博客 506

网络流例题及构图选讲

最大流最小割问题本文就不对最大流最小割问题定义了,当然也就不证明最大流==最小割了。 本文介绍一种求最大流的方法。SAP 算法(最短增广路算 法)。最短增广路算法(Shortest Augmenting Path Algorithm),即每次寻找包含弧的个数最少的增广路进行增广,可以证明,此算法最多只需要进行|v|∗|s|/2|v|*|s|/2次增广。并且引入距离标号的概念,可以在的时间O(|v

Jason Victor Yan's 1335

C语言练习题:据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤的数值是公斤数值的两倍。现给定某人身高,请你计算其标准体重应该是多少?

题目内容: 据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤的数值是公斤数值的两倍。现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧……) 输入格式: 输入第一行给出一个正整数H(100 < H ≤ 300),为某人身高。 输出格式: 在一行中输出对应的标准体重,单位为市斤,保留小数点后1位。 输入样例: 169 输出样例: 124.2 代码如下: #include<stdio.h> int main() { i

weixin_44877226的博客 2万+

poj 3281 Dining (最大流)

POJ 3281 Dining  这题WA了两次。刚开始我建的图是: s→食物→牛→饮料→t ,但这样不能保证每头牛最多只得到一种食物和一种饮料,WA了。后来又想了一下,按照以下方式建图:s→食物→牛→牛→饮料→t,这样就能保证每头牛最多只得到一种食物和一种饮料。心想这回肯定能AC的,谁知提交上去还是一个WA。我又仔细检查了一下代码,惊奇的发现是数组开小了,这个真不应该~ #include

~飞呀,飞~ 1226

【LLC快速上手系列】LLC轻载时:开关频率 + 死区时间 联合优化!

轻载优化,频率别飞天,死区要有耐心。两手一起抓,效率高到笑。😎。

weixin_43199439的博客 1187

【26美赛F题 To Gen-AI, or Not To Gen-AI】(MCM/ICM)思路解析及代码分享

摘要:本文研究生成式人工智能(Gen-AI)对三类职业(STEM、技能型工艺、艺术)的影响,建立量化模型预测未来10-20年岗位需求变化。通过分析AI替代效应($R_{sub}(t)$)和增强效应($R_{enh}(t)$),提出差异化高校课程调整策略:STEM专业需加强AI集成能力,技能型工艺专业应结合智能工具与实操训练,艺术专业需平衡AI创作辅助与原创性培养。模型表明,高校通过针对性课程优化可提升毕业生在AI时代的就业竞争力,为教育决策提供数据支持。(149字)

一键难忘的博客 639

poj 3281 Dining (sap模板)

题目大意:有F种食物,D种饮料,N头奶牛,只能吃某种食物和饮料(而且只能吃特定的一份)一种食物被一头牛吃了之后,其余牛就不能吃了 要求输出最多分配能够满足的牛的数量 题解:解题思路:建图,有2*n+f+d+2个顶点,0表示源点,2*n+f+d+1表示汇点,由源点指向食物,再由食物指向牛,牛再指向对应的饮料,饮料再指向汇点 当然要使每一头牛都对应每一份食物与饮料,所以应该牛i指向牛i再指向饮料

Ezereal的博客 345

手把手教你完成基于cnn的手写数字识别系统MATLAB语言

手写数字识别是经典的 CNN 分类应用之一,常用的数据集就是 MNIST 手写数字数据集,包含 0~9 这 10 个数字的手写图片,每个数字都由 6 万幅训练图像和 1 万幅测试图像构成。为了便于直观分析,这里选择 MATLAB 工具箱提供的 DigitDataset 进行训练识别,读者也可以直接利用 MNIST 数据集或者自己设计的数据集进行实验。其中,数据集文件夹 db 如图 所示。在数据集文件夹 db 里面对每个数字都建立了子文件夹,各自包含 1000 幅 28×28 大小的二维灰度图像。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1369

poj 3281 Dining 【最大流】

题目链接:http://poj.org/problem?id=3281题意: 给出牛n,饮料d还有食物f的数量,每头牛给出喜欢的饮料和食物,最后求出能够满足的牛的数量解法:源点到食物建边, 由食物到牛建边, 牛到饮料建边 ,饮料到汇点建边 ,求最大流。牛要拆点控制流量为1全部是有向的边,而且权值全部为1 有2*n+f+d+2个顶点 0表示源点,2*n+f+d+1表示汇点 1到f为食物点,f+

mfcheer 628

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

老版QQ原生表情gif动态

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

POJ 3281 Dining (最大流)

题意:n头奶牛,f个食物,d个饮料,当一个食物或饮料被奶牛吃掉后,不能再被其他奶牛吃掉,每头奶牛都有喜欢的食物、饮料,求吃掉喜欢的食物和饮料的最多奶牛数量。 题解:最大流 要是只有食物,就可以用二分图匹配了。 这里用最大流的方式很巧妙,从源点->食物->奶牛->饮料->汇点,这样建边,最大流就是答案,但是奶牛只能吃一种食物或饮料,单单这样建边奶牛会吃掉其他的。 我们在食物和饮料之间再放一组奶牛,即源点->食物->奶牛->奶牛->饮料->汇点,这样也就避免

gongyuandaye的博客 300

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【poj3281】【最大流】Dining

一道最大流的简单题。将食物和饮料分别看成一个点集,食物放在左边(记为f[i]),饮料放在右边(记为d[i])。然后将每头牛拆成两个点k,k' 然后开始建图: 1、对于每头牛喜欢的食物和饮料:添加edge(f[i],k,1),edge(d[i],k',1),edge(k,k',1),这样做的目的是为了限制每头牛只能享用一种食物和饮料。 2、对于每个食物和饮料:添加edge(s,f[i],1

I'm dreamer 626

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

poj 3281 Dining(最大流)

【题目链接】 http://poj.org/problem?id=3281 题目意思 有F中食物,D种饮料,n头牛。每种牛吃不同种类的食物和饮料,每种食物 饮料只能一只牛吃,问最多满足多少头牛? 解题思路 把食物和饮料分两边,一头牛分成两个点放中间,容量为1.最后建立两个虚点 代码部分 include <iostream> #include <algorithm> #inc...

绝丶爵的博客 254

POJ 3281 Dining (最大流)

题目链接:http://poj.org/problem?id=3281 引用一下题解:http://www.cnblogs.com/kuangbin/archive/2012/08/21/2649850.html 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> ...

weixin_30530339的博客 94

POJ 3281 Dining(网络流拆点)

【题目链接】http://poj.org/problem?id=3281 【题目大意】   给出一些食物,一些饮料,每头牛只喜欢一些种类的食物和饮料,   但是每头牛最多只能得到一种饮料和食物,问可以最多满足几头牛的要求   即同时得到喜欢的饮料和食物 【题解】   建立一个源点连接食物,汇点连接饮料,中间连接牛,   为了防止同一头牛占用多个资源,所...

weixin_30549175的博客 84

poj 3281 Dining(最大流)

题意:有N头牛,F种食物,D种饮料,每头牛有自己喜欢的食物和饮料,每种食物/饮料只能被一头牛享用,每头牛只能享用一种饮料和一种食物,求最后能有几头牛享用到自己喜欢的食物或饮料。 解法:很容易想到建图方法,食物放左边,饮料放右边,牛放中间,然后按照给定的关系连边,但这里需要对牛拆点,如果不拆的话,比如有这样的两条链,s->食物1->牛1->饮料1->t,s->食物2->牛

LSS 538

POJ3281 Dining 最大流

这道题我主要是看的白书(《挑战程序设计竞赛第2版》)第235页。建图过程很巧妙,把一头牛拆成两点,增加一个超级源点和超级汇点,就变成了很明显的最大流。。另外白书213-215页的各种变体总结的很好很全面,日后还是要活学活用啊Orz 最大流我用的SAP邻接表模板,一直错的一个点是没有初始化。。下次一定要注意了。。 附上AC代码: #include&lt;cstdio&gt; #include...

A confused programmer 263

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

WHITE ALBUM 325

POJ 3281 Dining

<br />有一群牛,若干饮料和食物。每只牛只能选择一中套餐:一种饮料和一种食物。被选中的食物和饮料不能 再被其他牛选用。问最多能让多少只牛选到自己中意的套餐。 建立一个源点跟每种食物相连,建立一个汇点跟每种饮料连边,将牛拆点分为A牛B牛,第i只牛中意的食 物和饮料分别跟A牛和B牛连边(注意边的方向)。A和B牛之间连边。所有边权均为1。做一次SAP即可: 擦,邻接表的模板又挂了。 #include <pzjay_cpyr> const int sup = 810; const

Belong to Sopranos 793

POJ 3281 -- Dining

代码实现: #include #include #include #include #include #define Min(a,b) ((a)<(b)?(a):(b)) #define Max(a,b) ((a)>(b)?(a):(b)) #define INF 0x3f3f3f3f #define IN64 0x3f3f3f3f3f3f3f3fll using namespace std;

Ac_try的专栏 347

POJ-3281 Dining

像是二分图匹配问题,但不同的是每只牛有两种需求,必须同时满足 有个巧妙的方法,用网络流来完成,就是将图分为三层,食物,牛,饮料 然后一个源点连向食物,边权1,饮料连向汇点,边权1 牛就分为两个点,入点和出点,入点到出点连边,边权为1 然后牛需要的食物向牛的入点连边,牛的出点向牛需要的饮料连边 用ISAP算法跑一遍源点到汇点的最大流就可以了 #include&lt;iostream&g...

wl16wzl的博客 191
上一篇: POJ1273 Drainage Ditches (SAP+GAP)
下一篇: POJ1004 Financial Management
muximuxi525
博客等级 码龄15年 134粉丝 294原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值