洛谷P2604 网络扩容 拆点+费用流
这题貌似比较水吧,最简单的拆点,直接上代码了。
#include <bits/stdc++.h>
using namespace std;
#define N 1000
#define M 5000
#define INF 0x3f3f3f3f
#define mp make_pair
#define pii pair<int, int>
#define pb push_back
int n, m, K, S, T;
int d[2*N+5], vis[2*N+5], a[2*N+5], pre[2*N+5];
int t1[M+5], t2[M+5], t3[M+5], t4[M+5];
struct Edge
{
int from, to, cap, flow, cost;
};
vector<Edge> edges;
vector<int> G[2*N+5];
void addEdge(int u, int v, int cap, int cost)
{
edges.pb(Edge{u, v, cap, 0, cost}), edges.pb(Edge{v, u, 0, 0, -cost});
G[u].pb(edges.size()-2), G[v].pb(edges.size()-1);
}
int SPFA(int &flow, int &cost)
{
memset(d, 0x3f, sizeof d);
d[S] = 0, vis[S] = 1, pre[S] = 0, a[S] = INF;
queue<int> q;
q.push(S);
while(!q.empty())
{
int u = q.front(); q.pop();
vis[u] = 0;
for(int i = 0, v; i < G[u].size(); ++i)
{
Edge &e = edges[G[u][i]];
if(e.cap > e.flow && d[e.to] > d[u]+e.cost)
{
d[e.to] = d[u]+e.cost;
pre[e.to] = G[u][i];
a[e.to] = min(a[u], e.cap-e.flow);
if(!vis[e.to]) vis[e.to] = 1, q.push(e.to);
}
}
}
if(d[T] == INF) return 0;
flow += a[T], cost += d[T]*a[T];
int u = T;
while(u != S)
{
edges[pre[u]].flow += a[T], edges[pre[u]^1].flow -= a[T];
u = edges[pre[u]].from;
}
return 1;
}
pii minCost()
{
int flow = 0, cost = 0;
while(SPFA(flow, cost));
return mp(flow, cost);
}
void clear()
{
for(int i = 0; i <= n; ++i) G[i].clear();
edges.clear();
}
int main()
{
scanf("%d%d%d", &n, &m, &K);
for(int i = 1; i <= m; ++i)
{
scanf("%d%d%d%d", &t1[i], &t2[i], &t3[i], &t4[i]);
addEdge(t1[i], t2[i], t3[i], 0);
}
S = 0, T = n;
addEdge(S, 1, INF, 0);
int ans1;
printf("%d ", ans1 = minCost().first);
clear();
addEdge(S, 1, ans1+K, 0);
for(int i = 1; i <= n; ++i) addEdge(i, i+n, INF, 0);
for(int i = 1; i <= m; ++i)
addEdge(t1[i], t2[i], t3[i], 0), addEdge(t1[i]+n, t2[i], K, t4[i]);
printf("%d\n", minCost().second);
return 0;
}
洛谷P2604 网络扩容 拆点+费用流的更多相关文章
- 洛谷P4014 分配问题【最小/大费用流】题解+AC代码
洛谷P4014 分配问题[最小/大费用流]题解+AC代码 题目描述 有 n 件工作要分配给 n 个人做.第 i 个人做第 j 件工作产生的效益为c ij. 试设计一个将 n 件工作分配给 n 个人做的 ...
- 【洛谷2053】 [SCOI2007]修车(费用流)
传送门 洛谷 Solution 考虑把每一个修车工人拆成\(n\)个点,那么考虑令\(id(i,j)\)为第\(i\)个工人倒数第\(j\)次修车. 然后就可以直接跑费用流了!!! 代码实现 /* m ...
- 洛谷 P4016负载平衡问题【费用流】题解+AC代码
洛谷 P4016负载平衡问题 P4014 分配问题[费用流]题解+AC代码 负载平衡问题 题目描述 GG 公司有n个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n ...
- 洛谷 P4012 深海机器人问题【费用流】
题目链接:https://www.luogu.org/problemnew/show/P4012 洛谷 P4012 深海机器人问题 输入输出样例 输入样例#1: 1 1 2 2 1 2 3 4 5 6 ...
- 洛谷P2045 方格取数加强版(费用流)
题意 题目链接 Sol 这题能想到费用流就不难做了 从S向(1, 1)连费用为0,流量为K的边 从(n, n)向T连费用为0,流量为K的边 对于每个点我们可以拆点限流,同时为了保证每个点只被经过一次, ...
- 洛谷P2770 航空路线问题(费用流)
传送门 完了这题好厉害……字符串什么的好麻烦…… 要求从$1$到$n$的路径,不重复,经过边数最多 每一个点拆成两个,$A_i,B_i$,然后$A_i$到$B_i$连容量为$1$,费用为$1$的边,保 ...
- 洛谷P3356 火星探险问题(费用流)
传送门 和深海机器人问题差不多……看到有的大佬是用dp过的,强无敌…… 考虑一下,把每一个点拆点,分别是$A_i$和$B_i$,连一条容量为$inf$,费用为$0$的边,表示可以随便走.如果有石头,再 ...
- 洛谷P4013 数字梯形问题(费用流)
传送门 两个感受:码量感人……大佬nb…… 规则一:$m$条路径都不相交,那么每一个点只能经过一次,那么考虑拆点,把每一个点拆成$A_{i,j}$和$B_{i,j}$,然后两点之间连一条容量$1$,费 ...
- 洛谷 - P2045 - 方格取数加强版 - 费用流
原来这种题的解法是费用流. 从一个方格的左上走到右下,最多走k次,每个数最多拿走一次. 每次走动的流量设为1,起始点拆点成限制流量k. 每个点拆成两条路,一条路限制流量1,费用为价值相反数.另一条路无 ...
随机推荐
- Biorhythms(poj1006+中国剩余定理)
Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 117973 Accepted: 37026 Des ...
- Django之无名分组,有名分组
在Django 2.0版本之前,在urls,py文件中,用url设定视图函数 urlpatterns = [ url(r'login/',views.login), ] 其中第一个参数是正则匹配,如下 ...
- jQuery内容过滤选择器与子元素过滤选择器用法实例分析
jQuery选择器内容过滤 一.:contains(text) 选择器::contains(text)描述:匹配包含给定文本的元素返回值:元素集合 示例: ? 1 2 $("div.mini ...
- Html和Css学习笔记-html基础知识
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 此篇博客是我的复习笔记,html和css学的时间太久了,忘得差不多了,最近要使用一下,所以重新打开html的书略读,后记录了标签 ...
- Golang学习笔记(一)
这个系列学习文章是对ASTAXIE大神的GoWeb编程的读书笔记. 1. 关于GOPATH $GOPATH 是系统中重要的环境变量,他不是Go的安装目录. 假如我们将GOPATH设置在这里: /hom ...
- shell 查找与替换
grep sed 如果想把一个字符串中的一些字符删除可以如此:#Echo “2006-11-21 22:16:30” | sed ‘s/-//g’ | sed ‘s/ //g’ | sed ‘s/:/ ...
- Android Studio打包SDK后,为什么没有bundles文件夹?
在Android Studio中,将项目打包成jar包,按照网上说的方法打包完成后,在intermediates文件夹下没有bundles,AS版本3.1.2,后来发现,原来是intermediate ...
- 【书摘】一种基于Git的版本管理方案
本篇摘录自<前端工程化体系设计与实践>一书,笔者认为是一套相对合理的方案,建议团队可以根据实际情况进行调整并增加协作命名规范. master分支--主分支 存储已发布版本的源码,不能在此分 ...
- C#语言中的修饰符
public:公有访问.不受任何限制. private:私有访问.只限于本类成员访问,子类和实例都不能访问. protected:保护访问.只限于本类和子类访问,实例不能访问. internal:内部 ...
- C# 内插字符串与字符串复合格式
var name = "Tom"; ; string aa = string.Format("name:{0},age:{1}", name, age);//字 ...