HDU4292_Food
给出一些人,一些食物,一些饮料,每个人都只喜欢喝某些饮料,吃某些食品,每个食品和饮料都有一定的数量,现在问最多能满足多少人的需求。
注意理解题意了,每个人只需要要拿一个食物和一个饮料即可,这题目说得好像不是很明显,坑呐。
简单建模。超级源点->食物->人->人'->饮料->超级汇点。除了与源点和汇点的边容量为食物和饮料数量,其他的都为1.
跑最大流,就是答案了。。不多说
召唤代码君:
#include <iostream> #include <cstdio> #include <cstring> #define maxn 1010 #define maxm 2000100 using namespace std; int first[maxn],next[maxm],to[maxm],c[maxm],N; int d[maxn],tag[maxn],TAG=520; int s,t,n,F,D,ans,tmp; char str[maxn][maxn]; int Q[maxn],bot,top; bool can[maxn]; void _init() { s=0,t=F+D+n+n+1,N=-1; for ( int i=s; i<=t; i++) first[i]=-1; } void addedge( int U, int V, int W) { N++; to[N]=V,c[N]=W,next[N]=first[U],first[U]=N; N++; to[N]=U,c[N]=0,next[N]=first[V],first[V]=N; } void edge_build() { for ( int i=1; i<=F; i++) scanf ( "%d" ,&tmp),addedge(s,i,tmp); for ( int i=1; i<=D; i++) scanf ( "%d" ,&tmp),addedge(F+n+n+i,t,tmp); for ( int i=1; i<=n; i++) scanf ( "%s" ,str[i]+1); for ( int i=1; i<=n; i++) for ( int j=1; j<=F; j++) if (str[i][j]== 'Y' ) addedge(j,F+i,1); for ( int i=1; i<=n; i++) scanf ( "%s" ,str[i]+1); for ( int i=1; i<=n; i++) for ( int j=1; j<=D; j++) if (str[i][j]== 'Y' ) addedge(F+n+i,F+n+n+j,1); for ( int i=1; i<=n; i++) addedge(F+i,F+n+i,1); } bool bfs() { TAG++; Q[bot=top=1]=t,d[t]=0,tag[t]=TAG,can[t]= false ; while (bot<=top) { int cur=Q[bot++]; for ( int i=first[cur]; i!=-1; i=next[i]) if (c[i^1]>0 && tag[to[i]]!=TAG) { tag[to[i]]=TAG,Q[++top]=to[i],d[to[i]]=d[cur]+1,can[to[i]]= false ; if (to[i]==s) return true ; } } return false ; } int dfs( int cur, int num) { if (cur==t) return num; int tmp=num,k; for ( int i=first[cur]; i!=-1; i=next[i]) if (c[i]>0 && tag[to[i]]==TAG && d[to[i]]==d[cur]-1 && can[to[i]]== false ) { k=dfs(to[i],min(num,c[i])); if (k) num-=k,c[i]-=k,c[i^1]+=k; if (num==0) break ; } if (num) can[cur]= true ; return tmp-num; } int main() { while ( scanf ( "%d%d%d" ,&n,&F,&D)!=EOF) { _init(); edge_build(); for (ans=0; bfs(); bfs()) ans+=dfs(s,maxm); printf ( "%d\n" ,ans); } return 0; } |
如有转载,请注明出处(http://www.cnblogs.com/lochan)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 如何打造一个高并发系统?
· 《SpringBoot》EasyExcel实现百万数据的导入导出