LibreOJ #102. 最小费用流
二次联通门 : LibreOJ #102. 最小费用流
/*
LibreOJ #102. 最小费用流 Spfa跑花费
记录路径
倒推回去 */
#include <cstring>
#include <cstdio>
#include <queue> #define Max 10000 void read (int &now)
{
now = ;
register char word = getchar ();
while (word > '' || word < '')
word = getchar ();
while (word >= '' && word <= '')
{
now = now * + word - '';
word = getchar ();
}
} inline int min (int a, int b)
{
return a < b ? a : b;
} class Cost_Flow_Type
{ private : int __to[Max * ];
int __next[Max * ];
int __flow[Max * ], __cost[Max * ]; int edge_list[Max];
int Edge_Count; int dis[Max], can_flow[Max];
bool visit[Max];
int pre[Max]; public : Cost_Flow_Type ()
{
Edge_Count = ;
} inline void Insert_edge (int from, int to, int flow, int cost)
{
Edge_Count ++; __to[Edge_Count] = to;
__next[Edge_Count] = edge_list[from];
edge_list[from] = Edge_Count; __flow[Edge_Count] = flow;
__cost[Edge_Count] = cost; Edge_Count ++; __to[Edge_Count] = from;
__next[Edge_Count] = edge_list[to];
edge_list[to] = Edge_Count; __flow[Edge_Count] = ;
__cost[Edge_Count] = -cost;
} bool Spfa (int Start, int End)
{
memset (dis, 0x3f, sizeof dis);
memset (visit, false, sizeof visit); std :: queue <int> Queue;
register int now; visit[Start] = true;
can_flow[Start] = dis[];
pre[Start] = ; for (Queue.push (Start), dis[Start] = ; !Queue.empty (); Queue.pop ())
{
now = Queue.front (); visit[now] = false; for (int i = edge_list[now]; i; i = __next[i])
if (__flow[i] && dis[__to[i]] > dis[now] + __cost[i])
{
dis[__to[i]] = dis[now] + __cost[i];
pre[__to[i]] = i; can_flow[__to[i]] = min (can_flow[now], __flow[i]); if (!visit[__to[i]])
{
Queue.push (__to[i]);
visit[__to[i]] = true;
}
}
} return dis[End] < dis[];
} void Get_Cost_Flow (int Start, int End)
{
int res = ;
int Cost_ = ;
for (int x; Spfa (Start, End); )
{
x = can_flow[End];
for (int i = End; i != Start; i = __to[pre[i] ^ ])
{
__flow[pre[i]] -= x;
__flow[pre[i] ^ ] += x;
}
res += x;
Cost_ += dis[End] * x;
} printf ("%d %d", res, Cost_);
}
}; int N, M; Cost_Flow_Type Make; int main (int argc, char *argv[])
{
int x, y, z, Flandre; for (read (N), read (M); M --; )
{
read (x);
read (y);
read (z);
read (Flandre); Make.Insert_edge (x, y, z, Flandre);
} Make.Get_Cost_Flow (, N); return ;
}
LibreOJ #102. 最小费用流的更多相关文章
- loj 102 最小费用流
补一发费用流的代码 %%%棒神 #include<iostream> #include<cstdio> #include<cstring> #include< ...
- LibreOJ 题解汇总
目录 #1. A + B Problem #2. Hello, World! #3. Copycat #4. Quine #7. Input Test #100. 矩阵乘法 #101. 最大流 #10 ...
- Entity Framework 6 Recipes 2nd Edition(10-2)译 -> 返回输出参数
10-2. 返回输出参数 问题 想获取存储过程里的一个或多个输出参数的值 解决方案 假设我们有一个像Figure 10-1所示的,出租车辆与租金收入的模型 Figure 10-1.出租车辆与租金收入的 ...
- 【安卓】aidl.exe E 10744 10584 io_delegate.cpp:102] Error while creating directories: Invalid argument
这几天在使用.aidl文件的时候eclipse的控制台总是爆出如下提示: aidl.exe E 10744 10584 io_delegate.cpp:102] Error while creatin ...
- POJ2195 最小费用流
题目:http://poj.org/problem?id=2195 处理出每个人到每个门的曼哈顿距离,分别建立容量为1费用为曼哈顿距离的边,在源点和每个人人之间建立容量为1费用为0的边,在门和汇点之间 ...
- HDU 4067 hdoj 4067 Random Maze 最小费用流
给出n个点,m条边,入口s和出口t,对于每条边有两个值a,b,如果保留这条边需要花费:否则,移除这条边需要花费b. 题目要求用最小费用构造一个有向图满足以下条件: 1.只有一个入口和出口 2.所有路都 ...
- POJ 2516:Minimum Cost(最小费用流)
https://vjudge.net/problem/11079/origin 题意:有N个商店和M个供应商和K种物品,每个商店每种物品有一个需求数,每个供应商每种物品有一个供应量,供应商到商店之间的 ...
- POJ-2175 Evacuation Plan 最小费用流、负环判定
题意:给定一个最小费用流的模型,根据给定的数据判定是否为最优解,如果不为最优解则给出一个比给定更优的解即可.不需要得出最优解. 解法:由给定的数据能够得出一个残图,且这个图满足了最大流的性质,判定一个 ...
- Going Home (hdu 1533 最小费用流)
集训的图论都快结束了,我才看懂了最小费用流,惭愧啊. = = 但是今天机械键盘到了,有弄好了自行车,好高兴\(^o^)/~ 其实也不是看懂,就会套个模板而已.... 这题最重要的就是一个: 多组输入一 ...
随机推荐
- SAS学习笔记26 方差分析
对于多于两组(k>2)样本均数的比较,t检验不再适用,方差分析(analysis of variance, ANOVA)则是解决上述问题的重要分析方法.方差分析由R.A.Fisher(1923) ...
- Board Game CodeForces - 605D (BFS)
大意: 给定$n$张卡$(a_i,b_i,c_i,d_i)$, 初始坐标$(0,0)$. 假设当前在$(x,y)$, 若$x\ge a_i,y\ge b_i$, 则可以使用第$i$张卡, 使用后达到坐 ...
- 【SQL Server性能优化】删除大量数据的方法比较
原文:[SQL Server性能优化]删除大量数据的方法比较 如果你要删除表中的大量数据,这个大量一般是指删除大于10%的记录,那么如何删除,效率才会比较高呢? 而如何删除才会对系统的影响相对较小呢? ...
- Post请求数据传到后台+号变成了空格
问题: 今天遇到一个问题:页面带有"+"号的数据,传到服务端接口,结果+号变成了空格.例如:传“1+1”变成了"1 1". 解决办法: 方案一: 将“+”号替换 ...
- 微软升级 WSL Window Subsystem for Linux Win10系统自带Linux
在设计之初,微软就允许类似于Win32这种子系统运行于windows NT内核之上,它可以为上层应用提供编程接口,同时避免应用去实现内核里的一些调用细节.NT内核的设计在最开始就可以支持POSIX,O ...
- 手把手教你如何用java8新特性将List中按指定属性排序,过滤重复数据
在java中常常会遇到这样一个问题,在实际应用中,总会碰到对List排序并过滤重复的问题,如果List中放的只是简单的String类型过滤so easy,但是实际应用中并不会这么easy,往往List ...
- java玩转zip压缩包
首先将相关jar包引入pom.xml中 <!-- 解压zip --> <dependency> <groupId>org.apache.ant</groupI ...
- Python学习记录8-继承2
继承 单继承和多继承 单继承:每个类只能继承一个类 多继承:每个类允许继承多个类 >>> class A(): pass >>> class B(A): pass ...
- nginx搭建反向代理服务器详解
一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从 ...
- JLINK固件烧写
最近在使用uVision V5.14.0.0 的时候,由于我使用的Jlink是盗版的,导致软件总是退出,然后再网上找到了解决办法. 下面介绍解决办法: 参考: http://www.9mcu.com/ ...