博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj3281-Dining ,最大流量,内置图
阅读量:5108 次
发布时间:2019-06-13

本文共 1977 字,大约阅读时间需要 6 分钟。

分析:

求最大流

建图:

拆点 牛拆成左边与食物相连的左牛 和 右边与饮料相连的右牛 

1、s->食物 连边

2、食物->左牛

3、左牛->右牛

4、右牛->饮料

5、饮料->t

边的方向为 s->食物->左牛->右牛->饮料->t

#include 
#include
#include
#include
#include
using namespace std;const int maxn = 500 + 5;const int INF = 100000000;struct Edge{ int from, to, cap, flow;};struct Dinic{ int n, m, s, t; vector
edges; vector
G[maxn]; bool vis[maxn]; int d[maxn]; int cur[maxn]; void init(int n) { this->n = 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}); m = edges.size(); G[from].push_back(m-2); G[to].push_back(m-1); } bool BFS() { memset(vis, 0, sizeof vis ); queue
Q; Q.push(s); vis[s] = 1; d[s] = 0; while(!Q.empty()) { int x = Q.front(); Q.pop(); for(int i=0; i
e.flow) { vis[e.to] = 1; d[e.to] = d[x] + 1; Q.push(e.to); } } } return vis[t]; } int DFS(int x, int a) { if(x == t || a == 0) return a; int flow = 0, f; for(int& i = cur[x]; i
0) { e.flow += f; edges[G[x][i]^1].flow -= f; flow += f; a -= f; if(a==0) break; } } return flow; } int Maxflow(int s, int t) { this->s = s; this->t =t; int flow = 0; while(BFS()){ memset(cur, 0, sizeof cur ); flow += DFS(s, INF); } return flow; }};Dinic solver;int main(){ int N, F, D; int i, j; scanf("%d%d%d", &N, &F, &D); int s = 0, t = 2*N + F + D; solver.init(t+1); for(i=1; i<=N; ++i) solver.AddEdge(i, N+i, 1); for(i=1; i<=N; ++i) { int f, d, x; scanf("%d%d", &f, &d); for(j=1; j<=f; ++j) { scanf("%d", &x); solver.AddEdge(2*N+x, i, 1); } for(j=1; j<=d; ++j) { scanf("%d", &x); solver.AddEdge(N+i, 2*N+F+x, 1); } } for(i=1; i<=F; ++i) solver.AddEdge(s, 2*N + i, 1); for(i=1; i<=D; ++i) solver.AddEdge(2*N + F + i, t, 1); int ans = solver.Maxflow(s, t); printf("%d\n", ans); return 0;}

版权声明:本文博主原创文章,博客,未经同意不得转载。

转载于:https://www.cnblogs.com/zfyouxi/p/4842602.html

你可能感兴趣的文章
cookie和localStorage、sessionStorage的区别
查看>>
关于工作流引擎授权问题的需求变更
查看>>
函数的作用域与匿名函数
查看>>
控制台输出文字颜色的方法
查看>>
百度前端学习日记14——面向对象
查看>>
关于中断处理程序的运行问题
查看>>
C#中int32 的有效值范围
查看>>
js只能输入数字和小数点
查看>>
nyoj 20 吝啬的国度
查看>>
nyoj 86 找球号(一)(set,map)
查看>>
Oracle 删除重复数据只留一条
查看>>
poj1984 带权并查集(向量处理)
查看>>
P2764 最小路径覆盖问题
查看>>
PAT-ADVANCED-1090-Highest Price in Supply Chain
查看>>
sklearn学习7-----决策树(tree)
查看>>
39. Combination Sum II
查看>>
vue 配置环境遇到的问题总结
查看>>
JavaScript零基础学习系列三
查看>>
2018.2.1号 第一次在公司闹事
查看>>
Anaconda使用教程
查看>>