dij 费用流
2024-08-30 12:51:28
#include <bits/stdc++.h>
using namespace std;
typedef long long lld;
const int MAXN = 50010, MAXM = 1000010, INF = 0x3f3f3f3f;
struct Edge { int to, next, cap, flow, cost; } edge[MAXM];
int head[MAXN], tol, pre[MAXN], dis[MAXN], h[MAXN];
struct Node { int x, dis; bool operator<(Node b) const { return b.dis < dis; } };
priority_queue<Node> Q;
void init() {
tol = 0; memset(head, -1, sizeof(head));
}
void addedge(int u, int v, int cap, int cost) {
edge[tol] = (Edge){ v, head[u], cap, 0, cost }; head[u] = tol++;
edge[tol] = (Edge){ u, head[v], 0, 0, -cost }; head[v] = tol++;
}
bool dijkstra(int s, int t, int N) {
for (int i = 0; i <= N; i++)
h[i] = min(h[i] + dis[i], INF), dis[i] = INF, pre[i] = -1;
dis[s] = 0, Q.push(Node { s, 0 });
while (!Q.empty()) {
int u = Q.top().x, dist = Q.top().dis; Q.pop();
if (dist > dis[u]) continue;
for (int i = head[u]; ~i; i = edge[i].next) {
Edge& e = edge[i]; int v = edge[i].to;
if (e.cap > e.flow && dis[v] > dis[u] + e.cost + h[u] - h[v]) {
dis[v] = dis[u] + e.cost + h[u] - h[v], pre[v] = i;
Q.push(Node { v, dis[v] });
}
}
}
return dis[t] < INF;
}
pair<int,int> minCostMaxFlow(int s, int t, int N) {
int flow = 0, cost = 0;
while (dijkstra(s, t, N)) {
int Min = INF, Fee = dis[t] + h[t] - h[s];
for (int i = pre[t]; ~i; i = pre[edge[i^1].to])
Min = min(Min, edge[i].cap - edge[i].flow);
for (int i = pre[t]; ~i; i = pre[edge[i^1].to])
edge[i].flow += Min, edge[i^1].flow -= Min;
flow += Min, cost += Fee * Min;
}
return make_pair(flow, cost);
}
int main()
{
init(); int n, m, s, t, u, v, w, f;
scanf("%d %d %d %d", &n, &m, &s, &t);
for (int i = 1; i <= m; i++)
scanf("%d %d %d %d", &u, &v, &w, &f),
addedge(u, v, w, f);
auto ans = minCostMaxFlow(s, t, n);
printf("%d %d\n", ans.first, ans.second);
return 0;
}
最新文章
- python基础总结篇——使用Mysql
- 开源:ASP.NET MVC+EF6+Bootstrap开发框架
- UIView和CALayer的区别
- ubuntu 下载额外数据不成功”的恼人提示通知
- iOS7总显示状态栏的解决方法
- PLINQ 简介
- android开发学习笔记:圆角的Button
- ext4 delalloc相关
- 【&#9733;】微信之于QQ的市场哲学
- C# SerialPort自定义串口DCB
- Istio 是什么?
- Android中软键盘展示、EditText焦点获取及windowSoftInputMode属性探究
- jQuery的1.x版本的$(element).css()设置元素字体颜色时出现的问题(在IE8以下)
- s3c2440 nandflash 初始化
- dll静态调用和动态调用
- mybatis中使用常量
- sonar-gerrit plugin配置
- Windows Phone本地数据库(SQLCE):10、创建数据库(翻译) (转)
- kibana 显示 @timestamp 时间问题(utc or browser当前时间)自动转换显示
- 线程属性pthread_attr_t简介