UVA1486 Transportation 费用流 拆边。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <queue>
#include <cstring>
using namespace std;
const int maxm = 50000*4;
const int maxn = 110;
struct node
{
int v,cost,flow,next;//v表示指向的下一个顶点,a表示系数,flow表示可以过的流量
}edge[maxm];
int head[maxn],dis[maxn],pre[maxn],cur[maxn],vis[maxn],aug[maxn];
int s,t,v,n,m,k,id,flow;
void add_edge(int u,int v,int flow,int cost){
edge[id].v = v;edge[id].cost = cost;edge[id].flow = flow;edge[id].next = head[u];head[u] = id++;
edge[id].v = u;edge[id].cost = -cost;edge[id].flow = 0;edge[id].next = head[v];head[v] = id++;
}
int min(int x,int y){
return x < y ? x : y;
}
void init(){
s = 0,t = n+1;
memset(head,-1,sizeof(head));id = 0;
int u,v,a,flow; while( m-- ){
scanf("%d%d%d%d",&u,&v,&a,&flow);
for(int i = 1; i <= flow; i++)//因为边很少,所以可以拆边
add_edge(u,v,1,i*i*a - a*(i-1)*(i-1));//每增加一条边,费用增加
}
//源点流出的流量为k,汇点流入的流量为k
add_edge(0,1,k,0);
add_edge(n,n+1,k,0);
}
int spfa(){
memset(dis,-1,sizeof(dis));
memset(vis,0,sizeof(vis));
memset(aug,-1,sizeof(aug));
queue<int>que;
aug[s] = (1<<30) -1;
dis[s] = 0;vis[s] = 1;pre[s] = s;
que.push(s);
while( !que.empty()){
int u = que.front();
que.pop();
vis[u] = 0;
for(int id = head[u]; id != -1; id = edge[id].next)
{
int v = edge[id].v;
if( edge[id].flow > 0)
{
int MIN = min(aug[u],edge[id].flow);
if(dis[v] == -1 || dis[v] > dis[u] + edge[id].cost)
{
dis[v] = dis[u] + edge[id].cost;
pre[v] = u;cur[v] = id;
aug[v] = MIN;
// cout << v << " " << aug[v] << endl;
if(!vis[v] ){
vis[v] = 1;
que.push(v);
}
}
}
}
}
if( dis[t] == -1 )return 0;
return 1;
}
int get_max(){ int mincost = 0;
while(spfa() ){
mincost += dis[t];
k -= aug[t];
int now = t;
while( now != s){
edge[cur[now]].flow -= aug[t];
edge[cur[now]^1].flow += aug[t];
now = pre[now];
}
}
if(k > 0)return -1;
return mincost;
}
int main(){
// freopen("in.txt","r",stdin);
while(~scanf("%d%d%d",&n,&m,&k)){
init();
printf("%d\n",get_max());
}
return 0;
}
UVA1486 Transportation 费用流 拆边。的更多相关文章
- HDU 3667 费用流 拆边 Transportation
题意: 有N个城市,M条有向道路,要从1号城市运送K个货物到N号城市. 每条有向道路<u, v>运送费用和运送量的平方成正比,系数为ai 而且每条路最多运送Ci个货物,求最小费用. 分析: ...
- hoj 2543 (费用流 拆边)
http://acm.hit.edu.cn/hoj/problem/view?id=2543 1.将原图中的每条边(u, v)拆成两条:(u, v, Ci, 0), (u, v, ∞, Ei) 2.购 ...
- UVa1486 Transportation(最小费用最大流)
题目大概说有n个城市,m条有向边连着它们,每条边都有两个属性一个是ai一个是ci,ai表示运送x单位货物时花费ai*x*x的价钱,ci表示边最多能运送的货物数量(<=5).问从城市1运送k单位货 ...
- 【 UVALive - 5095】Transportation(费用流)
Description There are N cities, and M directed roads connecting them. Now you want to transport K un ...
- HDU 3667 Transportation(网络流之费用流)
题目地址:HDU 3667 这题的建图真是巧妙...为了保证流量正好达到k.须要让每一次增广到的流量都是1,这就须要把每一条边的流量都是1才行.可是每条边的流量并非1,该怎么办呢.这个时候能够拆边,反 ...
- 【BZOJ4930】棋盘 拆边费用流
[BZOJ4930]棋盘 Description 给定一个n×n的棋盘,棋盘上每个位置要么为空要么为障碍.定义棋盘上两个位置(x,y),(u,v)能互相攻击当前仅 当满足以下两个条件: 1:x=u或y ...
- 【BZOJ2245】[SDOI2011]工作安排 拆边费用流
[BZOJ2245][SDOI2011]工作安排 Description 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被 ...
- 【 UVALive - 2197】Paint the Roads(上下界费用流)
Description In a country there are n cities connected by m one way roads. You can paint any of these ...
- zoj3231 Apple Transportation(最大流)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Apple Transportation Time Limit: 1 Second ...
随机推荐
- 【Intellij】导出 jar 包
需要在 Intellij 导出 jar 包,一时不知道该怎么做,后来总算找到了方法,步骤如下: 1. File → Project Structure... → Artifacts → + → jar ...
- l命令练习题1
1.创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) [root@localhost ~]# mkdir -p /guanli/zonghe | mk ...
- 使用 OpenSSL为WindowsServer远程桌面(RDP)创建自签名证书 (Self-signed SSL certificate)
前言 笔者查阅很多资料,才写成此文章,如有错误,请读者们及时提出. 一般大家使用远程桌面(Remote Desktop)连接Windows Server时,总会有一个警告提示,如图1 图1 出现此警告 ...
- React 如何搭建脚手架
React 如何搭建脚手架 npm install -g create-react-app //安装 create-react-app react-demo // react-demo ...
- Linux服务部署Yapi项目(安装Node Mongdb Git Nginx等)
Linux服务部署Yapi 一,介绍与需求 1,我的安装环境:CentOS7+Node10.13.0+MongoDB4.0.10. 2,首先安装wget,用于下载node等其他工具 yum insta ...
- 安装CUDA9.0及对应版本的tensorflow-gpu详细过程(Windows server 2012R2版本也可以)
由于最近跑机器学习相关代码的时候CPU运算速度跟不上,这才利用GPU来运算代码,显然使用GPU来运算速度明显要快很多,但是搭配GPU的使用环境是真的麻烦且头疼.网上有很多牛人的搭建过程,虽然他们都成功 ...
- jdk1.8 HashMap底层数据结构:深入解析为什么jdk1.8 HashMap的容量一定要是2的n次幂
前言 1.本文根据jdk1.8源码来分析HashMap的容量取值问题: 2.本文有做 jdk1.8 HashMap.resize()扩容方法的源码解析:见下文“一.3.扩容:同样需要保证扩容后的容量是 ...
- 全屏滚动插件pagePiling.js
全屏滚动效果是最近非常流行的网页设计形式,带给用户良好的视觉和交互体验.pagePiling.js 这款 jQuery 插件可以帮助前端开发人员轻松实现这种效果.支持所有的主流浏览器,包括IE8+,支 ...
- Java连载16-++传参&关系运算符
一.++再举例 int a = 10; System.out.print(a++);//这里会打印出10,因为他们内部这个print函数有参数相当于参数x=a++ System.out.println ...
- c# http Post Get 方法
/// <summary> /// get方式访问webapi /// </summary> /// <param name="url">< ...