dij 费用流
#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;
}
dij 费用流的更多相关文章
- HDU 4780 Candy Factory(拆点费用流)
Problem Description A new candy factory opens in pku-town. The factory import M machines to produc ...
- 洛谷P3381 【模板】最小费用最大流(dijstra费用流)
题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表 ...
- 网络流小记(EK&dinic&当前弧优化&费用流)
欢 迎 来 到 网 络 瘤 的 世 界 什么是网络流? 现在我们有一座水库,周围有n个村庄,每个村庄都需要水,所以会修水管(每个水管都有一定的容量,流过的水量不能超过容量).最终水一定会流向唯一一个废 ...
- 补 第三场多校杭电 费用流 K Subsequence
K Subsequence 这个题目是这个人想吃东西,但是他每次吃的都是他的美味值都必须不递减,可以吃k次,问这个最大的美味值是多少. 这个是一个比较明显的费用流,建图也很好建,但是呢,这个题目卡sp ...
- hdu-5988 Coding Contest(费用流)
题目链接: Coding Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- POJ2195 Going Home[费用流|二分图最大权匹配]
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22088 Accepted: 11155 Desc ...
- BZOJ3130: [Sdoi2013]费用流[最大流 实数二分]
3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 960 Solved: 5 ...
- 洛谷 1004 dp或最大费用流
思路: dp方法: 设dp[i][j][k][l]为两条没有交叉的路径分别走到(i,j)和(k,l)处最大价值. 则转移方程为 dp[i][j][k][l]=max(dp[i-1][j][k-1][l ...
- Codeforces 730I [费用流]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给两行n个数,要求从第一行选取a个数,第二行选取b个数使得这些数加起来和最大. 限制条件是第一行选取了某个数的条件下,第二行不能选取对应位置的数. ...
随机推荐
- Prime Path (POJ - 3126 )(BFS)
转载请注明出处:https://blog.csdn.net/Mercury_Lc/article/details/82697622 作者:Mercury_Lc 题目链接 题意:就是给你一个n, ...
- 学数据分析到底要不要掌握Linux-Python基础前传(2)
使用Python的数据分析师到底要不要掌握Linux? 对于上面的问题,大部分的答案是Python数据分析在windows的环境下跑跑就可以了,没有必要再花时间来学习Linux; 这里jacky有一个 ...
- [JZOJ6347]:ZYB玩字符串(DP+记忆化搜索)
题目描述 $ZYB$获得了一个神秘的非空字符串$p$. 初始时,串$S$是空的. $ZYB$会执行若干次这样的操作: $1.$选取$S$中的一个任意的位置(可以是最前面或者最后面) $2.$在这个位置 ...
- 什么是跨平台性?原理是什么?JVM
所谓跨平台性,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行. 实现原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行 ...
- Linux设备驱动程序 之 异步通知
尽管大多数时候阻塞型和非阻塞型操作的组合以及select方法可以有效的查询设备,但是某些时候用这种技术处理就效率不搞了: 例如:一个进程在低优先级执行长的循环计算,但又需要尽可能快的处理输入数据,如果 ...
- Oracle中根据列名找到所属的表
oracle中如何根据一个字段名查找出所属的表名? 用如下语句, select * from user_tab_columns where column_name='列名', 例子:select * ...
- 数据库 | SQL 诊断优化套路包,套路用的对,速度升百倍
本文出自头条号老王谈运维,转载请说明出处. 前言 在DBA的日常工作中,调整个别性能较差的SQL语句是一项富有挑战性的工作.面对慢SQL,一些DBA会心烦,会沮丧,会束手无措,也会沉着冷静.斗智斗勇! ...
- RDS数据库全量恢复方案
一.全量恢复 恢复最近的快照,将快找之前的数据全量恢复 二.增量恢复 下载对应的binlog日志导入到数据库 三.还没有备份的binlog日志获取方法 首先连接 RDS for MySQL 后查看当前 ...
- python之scrapy初探
1.知识点 """ Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取 Scrapy模块: 1.schedul ...
- java ldap用户密码md5加密
在这里不过多介绍ldap,因为这样的文章特别多,这里就简单直接的记录这一个问题. 在springboot中通过引入spring-boot-starter-data-ldap,使用LdapTemplat ...