hdu3667 Transportation 费用与流量平方成正比的最小流 拆边法+最小费用最大流
/**
题目:hdu3667 Transportation 拆边法+最小费用最大流
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3667
题意:n个城市由m条有向边连接。要从城市1运输k流量到城市n。每条边有可以运输的流量容量,以及费用系数ai。
费用系数指该条边的费用为该条边的运输流量x的平方乘以ai。即ai*x^2。 如果无法运输k流量,输出-1,否则输出从城市1运输k流量到城市n的最小花费。 思路:拆边法+最小费用最大流 假设从u->v 容量为5, 费用系数为a。 那么拆成五条容量为1的边,每条边的费用分别为 a,3*a,5*a,7*a,9*a。 (如果容量更大,拆成更多边,继续11*a,13*a...) 因为是最小费用流,如果当前流量为1,那么肯定经过费用为a(1*1*a = a)的这条边,如果流量为2,那么肯定经过费用为a和费用为3a的边(满足:x^2*ai = 2^2*a=4a); 其他类推。 然后就是普通的最小费用最大流。 由于本题是要输出运输k流量的最小流,所以增加源点s,汇点t。 s->1,cap=k,cost=0; n->t,cap=k,cost=0; 求s到t的最小费用最大流即可。 如果最大流flow<k。那么-1。否则cost为正解。 */
#include<iostream>
#include<cstring>
#include<vector>
#include<map>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int INF = 0x3f3f3f3f;
typedef long long LL;
const int N = ;
struct Edge{
int from, to, cap, flow, cost;
Edge(int u,int v,int c,int f,int w):from(u),to(v),cap(c),flow(f),cost(w){}
};
struct MCMF{
int n, m;
vector<Edge> edges;
vector<int> G[N];
int inq[N];
int d[N];
int p[N];
int a[N]; void init(int n){
this->n = n;
for(int i = ; i <= n; i++) G[i].clear();
edges.clear();
} void AddEdge(int from,int to,int cap,long long cost){
edges.push_back(Edge(from,to,cap,,cost));
edges.push_back(Edge(to,from,,,-cost));
m = edges.size();
G[from].push_back(m-);
G[to].push_back(m-);
} bool BellmanFord(int s,int t,int &flow,long long &cost){
for(int i = ; i <= n; i++) d[i] = INF;
memset(inq, , sizeof inq);
d[s] = ; inq[s] = ; p[s] = ; a[s] = INF; queue<int> Q;
Q.push(s);
while(!Q.empty()){
int u = Q.front(); Q.pop();
inq[u] = ;
for(int i = ; 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;
p[e.to] = G[u][i];
a[e.to] = min(a[u],e.cap-e.flow);
if(!inq[e.to]) {Q.push(e.to); inq[e.to] = ;}
}
}
}
if(d[t]==INF) return false;
flow += a[t];
cost += (long long)d[t]*(long long)a[t];
for(int u = t; u!=s; u = edges[p[u]].from){
edges[p[u]].flow+=a[t];
edges[p[u]^].flow-=a[t];
}
return true;
}
int MincostMaxflow(int s,int t,long long &cost){
int flow = ;
cost = ;
while(BellmanFord(s,t,flow,cost));
return flow;
}
};
int main()
{
int n, m, k;
while(scanf("%d%d%d",&n,&m,&k)==)
{
int s = , t = n+;
MCMF mcmf;
mcmf.init(t);
mcmf.AddEdge(s,,k,);
mcmf.AddEdge(n,t,k,);
int u, v, a, c;
for(int i = ; i <= m; i++){
scanf("%d%d%d%d",&u,&v,&a,&c);
for(int j = , cnt = ; j <= c; j++, cnt+=){
mcmf.AddEdge(u,v,,a*cnt);
}
}
long long cost;
int flow = mcmf.MincostMaxflow(s,t,cost);
if(flow<k){
printf("-1\n");
}else
{
printf("%lld\n",cost);
}
}
return ;
}
hdu3667 Transportation 费用与流量平方成正比的最小流 拆边法+最小费用最大流的更多相关文章
- HDU3667 Transportation —— 最小费用流(费用与流量平方成正比)
题目链接:https://vjudge.net/problem/HDU-3667 Transportation Time Limit: 2000/1000 MS (Java/Others) Me ...
- HDU 3667 费用流 拆边 Transportation
题意: 有N个城市,M条有向道路,要从1号城市运送K个货物到N号城市. 每条有向道路<u, v>运送费用和运送量的平方成正比,系数为ai 而且每条路最多运送Ci个货物,求最小费用. 分析: ...
- hdu 3667 /2010哈尔滨赛区H题 费用与流量为非线性关系/费用流
题意: 在一般费用流题目改动:路过某路,每x单位流量须要花费 ai*x^2(ai为给定的系数). 開始的的时候,一看仅仅只是是最后统计费用上在改动罢了,一看例子.发现根本没那么简单(ps:以后每次写程 ...
- 资深阿里程序员一一为你解刨Web前端知识体系结构,付出与收获成正比!
只要接触过前端,都会指导web前端的知识主要由三部分组成:分别为静态html,样式css,动态javascript(简称js)这三大部分组成.其三部分组成的一个体系的复杂程度不亚于其他一门技术的复杂程 ...
- hdu 3667(最小费用最大流+拆边)
Transportation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- UVA1486 Transportation 费用流 拆边。
#include <iostream> #include <cstdio> #include <cmath> #include <queue> #inc ...
- 纹理特征描述之自相关函数法 纹理粗糙性与自相关函数的扩展成正比 matlab代码实现
图像中通常采用自相关函数作为纹理测度 自相关函数的定义为: 调用自定义函数 zxcor()对砖墙面和大理石面纹理进行分析: 自定义函数 zxcor(): function [epsilon,eta ...
- POJ 2135.Farm Tour 消负圈法最小费用最大流
Evacuation Plan Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4914 Accepted: 1284 ...
- hdu 1853 Cyclic Tour (二分匹配KM最小权值 或 最小费用最大流)
Cyclic Tour Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/65535 K (Java/Others)Total ...
随机推荐
- DESede对称加密算法工具类
利用Cipher的核心功能,自己封装了一个加密解密的工具类,可以直接使用.在使用之前需要先下载commons-codec-1.9.jar,并导入项目. 工具类如下: package com.pcict ...
- curl错误码大全
CURL状态码列表 状态码 状态原因 解释 0 正常访问 访问地址未返回结果 1 错误的协议 未支持的协议.此版cURL 不支持这一协议. 2 初始化代码失败 初始化失败. 3 URL格式不正确 UR ...
- 配置thinkphp3.2 404页面
ThinkPHP自身提供了 404 页面的处理机制,我们只需要在控制器 中添加一个 EmptyController.class.php,并且实现以下方法即可,方法如下: <? class Em ...
- 让你的Photoshop编辑制作ICO格式图标文件(ICOFormat支持图标文件插件)
相信非常多制图的朋友都喜欢用PS,可是你能用Photoshop保存为ICO格式图标文件吗?默认肯定不行.不知道是什么原因,大名鼎鼎的图像编辑软件Adobe Photoshop一直不支持导入导出ico格 ...
- FastIV图像处理
新建一图像处理算法群,主要讨论图像处理与计算机视觉中的快速算法及其工程实现. 群号码:322687422
- win7之64位下安装oracle11g遇到问题和不能删除干净的问题
今天在win7下装了oracle11g 删了又卸 来来回回重启了4.5次,结合网上是解释归纳下几点: 一.win64_11gR2_database_1of2.zip和win64_11gR2_datab ...
- JS中confirm,prompt用法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- input输入框禁止显示历史记录
有时我们在设计网页时不想让表单保存用户输入历史记录,比如一些隐私数据 <input name="test" type="text" id="te ...
- ES6 async 与 await 实战
下面来说一说通过async和await方式来辅助请求和封装 首先我们定义一个类,定义一个async方法,才可以使用await class JForm extends React.Component { ...
- jquery下载保存文件
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...