Dining

POJ-3281

  • 这道题目其实也是网络流中求解最大流的一道模板题。
  • 只要建模出来以后直接套用模板就行了。这里的建模还需要考虑题目的要求:一种食物只能给一只牛。
  • 所以这里可以将牛拆成两个点,一个点和食物匹配,另一个点和饮料匹配。另外增加一个源点和一个汇点。最后根据题目的输入来连边就可以了。容量统一设置为1.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn=410;
const int INF=0X3F3F3F3F;
int n,d,f;
int s,t;
int m;
struct Edge {
int from, to, cap, flow;
Edge(int u, int v, int c, int f) : from(u), to(v), cap(c), flow(f) {}
};
vector<Edge> edges;//这里的边是实际边数的两倍,包括反向边
vector<int> G[maxn];//邻接表,G[i][j]表示结点i的第j条边在edges数组中的序号
int a[maxn];//a[i]表示起点到i的可改进量
int p[maxn];//edges数组中的编号,最短路图上p的入弧编号
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));//反向弧,容量为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.empty()) {
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]].from) {
edges[p[u]].flow += a[t];
edges[p[u] ^ 1].flow -= a[t];
}
flow += a[t];
}
return flow;
}
int main(){
while(cin>>n>>f>>d){
s=0,t=2*n+d+f+1;
init(2*n+f+d+1);
for(int i=1;i<=n;i++)
AddEdge(i,i+n,1);
for(int i=1;i<=f;i++){
AddEdge(s,2*n+i,1);
}
for(int i=1;i<=d;i++){
AddEdge(2*n+f+i,t,1);
}
int numf,numd;
for(int i=1;i<=n;i++){
cin>>numf>>numd;
int temp;
for(int j=0;j<numf;j++){
cin>>temp;
AddEdge(2*n+temp,i,1);
}
for(int j=0;j<numd;j++){
cin>>temp;
AddEdge(i+n,2*n+f+temp,1);
}
}
int ans=Maxflow(s,t);
cout<<ans<<endl;
}
return 0;
}

最新文章

  1. oracle 删除用户时的坑
  2. Js位置与大小(1)&mdash;&mdash;正确理解和运用与尺寸大小相关的DOM属性
  3. Python 字符串关键字过滤
  4. SQLServer数据库表架构和数据保存成sql文件
  5. 集群ssh服务和免密码登录的配置
  6. .NET Framework Execution Was Aborted By Escalation Policy
  7. NSAttributedString的用法
  8. 学习方法和阶段介绍 、 iOS界面开发引入 、 构造第一个App 、 视图控制器和视图 、 控件与事件 、 InterfaceBuilder
  9. [转] Java中的容器
  10. bzoj 3451 Normal
  11. python 之 初识模块
  12. Python简介之探观止矣
  13. Java 8 接口中的默认方法与静态方法
  14. Visualizing LSTM Layer with t-sne in Neural Networks
  15. 【转】Deep Learning(深度学习)学习笔记整理系列之(六)
  16. [转]Porting to Oracle with Entity Framework NLog
  17. 毕向东_Java基础视频教程第19天_IO流(15~17)
  18. hive中行转换成列以及hive相关知识
  19. LaTeX如何设置段落层次结构
  20. Maven中setting.xml配置Demo

热门文章

  1. poj1061青蛙的约会 (扩展欧几里德)
  2. Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) C. The Delivery Dilemma (贪心,结构体排序)
  3. 分块 &amp;&amp; 例题 I Hate It HDU - 1754
  4. WSL2 Ubuntu apt-get update失败
  5. echart关系图平分节点删除时自动平衡问题
  6. Redis 数据迁移 &amp; 数据审计
  7. Linux-压缩/解压缩命令
  8. Redis-第八章节-应用场景
  9. 基于HSV彩色空间与直方图信息的植物叶脉FFCM算法提取
  10. 微软官方 free 教程 &amp; 教材 ,MVC ,ASP.NET,.NET,