欢迎访问我的pat顶级题解目录哦 https://blog.csdn.net/richenyunqi/article/details/86751676
题目描述
算法设计
这道题是图论的最大流问题,关于该问题的解决算法有很多,比较容易掌握的是Edmonds-Karp算法。关于该问题和Edmonds-Karp算法展开起来比较复杂,读者可自行查阅相关资料。我在本博客中直接附上解决本题的代码,代码参考了刘汝佳的《算法竞赛与入门经典(第2版)》关于Edmonds-Karp算法的实现,其中添加了足够充分的注释,读者也可以参考我的代码进行理解。
注意点
图中边的描述最多有500行,最多有1000个点,所以相关数组至少要开到1000
C++代码
#include<bits/stdc++.h>
using namespace std;
struct Edge{
//边类
int from,to,cap,flow;
Edge(int f,int t,int c,int fl):from(f),to(t),cap(c),flow(fl) {
}
};
unordered_map<string,int>trans;//将字符串转换为数字,由0开始编号
vector<Edge>edges;//储存边
vector<int>graph[1005];//整个图,其中graph[i][j]表示结点i的第j条边在edges数组中的序号
int a[1005],p[1005];//a数组表示源点到结点a[i]的残量,p数组表示最短路树上到达结点p[i]的边在edges数组中的序号
void