K 台挤奶机(K≤30),C 头奶牛(C≤200),每机每天最多挤 M 头(M≤15)。奶牛与机器间有多条路径。安排每头奶牛到一台机器,使所有奶牛路径中最大距离最小化。
struct Edge { int from, to, cap, flow; };
vector edges;
vector G[MAXN];
int gap[MAXN], d[MAXN], cur[MAXN], p[MAXN];
void addEdge(int u, int v, int c) {
edges.push_back({u,v,c,0});
edges.push_back({v,u,0,0});
G[u].push_back(edges.size()-2);
G[v].push_back(edges.size()-1);
}
int ISAP(int s, int t, int N) {
// 标准 ISAP 实现(略)
// 返回最大流值
}
int main() {
int K, C, M;
while (cin >> K >> C >> M) {
int N = K + C;
// 读取邻接矩阵,0 表示不通,置 INF
// Floyd 求全对最短路
// 记录最大距离 maxD
int lo = 0, hi = maxD;
while (lo < hi) {
int mid = (lo + hi) / 2;
buildGraph(mid); // 根据 mid 建流网络
if (ISAP(S, T, V) == C) hi = mid;
else lo = mid + 1;
}
cout << lo << endl;
}
}