题意:M台机器要生产n个糖果,糖果i的生产区间在(si, ti),花费是k(pi-si),pi是实际开始生产的时间机器,j从初始化到生产糖果i所需的时间Cij,花费是Dij,任意机器从生产糖果i到生产糖果j,需花费时间Eij,花费Fij求生产完所有糖果所需的最小时间?
题解:先把糖果拆点,s向i糖果连流量为1,费用为0,i+n糖果向t连流量为1,费用为0,n
2+i机器向t连流量为1,费用为0的边,如果i能流向j,那么j连i+n一条边流量为1,费用为(ti-sj)k+dij,如果机器j能流向i+2n,那么连一条边流量为1,费用为(p-s)*k+d,假设i流向了j,那么说明j在i之后生产,而且保证了每台机器只生产一种糖果

//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize(4)
//#pragma GCC optimize("unroll-loops")
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include<bits/stdc++.h>
#define fi first
#define se second
#define db double
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 1000000007
#define ld long double
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pll pair<ll,ll>
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
//#define cd complex<double>
#define ull unsigned long long
#define base 1000000000000000000
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define fin freopen("a.txt","r",stdin)
#define fout freopen("a.txt","w",stdout)
#define fio ios::sync_with_stdio(false);cin.tie(0)
template<typename T>
inline T const& MAX(T const &a,T const &b){return a>b?a:b;}
template<typename T>
inline T const& MIN(T const &a,T const &b){return a<b?a:b;}
inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
inline void sub(ll &a,ll b){a-=b;if(a<0)a+=mod;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline ll qp(ll a,ll b){ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
inline ll qp(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c,b>>=1;}return ans;}using namespace std;const double eps=1e-8;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=300+10,maxn=400000+10,inf=0x3f3f3f3f;struct edge{int to,Next,c;int cost;
}e[maxn];
int cnt,head[N];
int s,t;
int dis[N],pre[N],path[N];
bool vis[N];
void add(int u,int v,int c,int cost)
{e[cnt].to=v;e[cnt].c=c;e[cnt].cost=cost;e[cnt].Next=head[u];head[u]=cnt++;e[cnt].to=u;e[cnt].c=0;e[cnt].cost=-cost;e[cnt].Next=head[v];head[v]=cnt++;
}
bool spfa()
{memset(pre,-1,sizeof pre);memset(dis,inf,sizeof dis);memset(vis,0,sizeof vis);dis[s]=0;vis[s]=1;queue<int>q;q.push(s);while(!q.empty()){int x=q.front();q.pop();vis[x]=0;for(int i=head[x];~i;i=e[i].Next){int te=e[i].to;if(e[i].c>0&&dis[x]+e[i].cost<dis[te]){dis[te]=dis[x]+e[i].cost;pre[te]=x;path[te]=i;if(!vis[te])q.push(te),vis[te]=1;}}}return pre[t]!=-1;
}
int n,m,k;
int mincostmaxflow()
{int cost=0,flow=0;while(spfa()){int f=inf;for(int i=t;i!=s;i=pre[i])if(e[path[i]].c<f)f=e[path[i]].c;flow+=f;cost+=dis[t]*f;for(int i=t;i!=s;i=pre[i]){e[path[i]].c-=f;e[path[i]^1].c+=f;}}if(flow!=n)return -1;return cost;
}
void init()
{memset(head,-1,sizeof head);cnt=0;
}
int cans[N],cant[N],ti[N][N];
int main()
{while(~scanf("%d%d%d",&n,&m,&k)){if(!n&&!m&&!k)break;init();s=2*n+m+1,t=2*n+m+2;for(int i=1;i<=m;i++)add(2*n+i,t,1,0);for(int i=1;i<=n;i++){scanf("%d%d",&cans[i],&cant[i]);add(s,i,1,0);add(i+n,t,1,0);}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&ti[i][j]);for(int i=1;i<=n;i++){for(int j=1,x;j<=m;j++){scanf("%d",&x);if(ti[i][j]<cant[i]){add(i,2*n+j,1,max(0,ti[i][j] - cans[i])*k+x);}}}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%d",&ti[i][j]);for(int i=1;i<=n;i++){for(int j=1,x;j<=n;j++){scanf("%d",&x);if(cant[i] + ti[i][j] < cant[j] && i != j)add(j,n+i,1,max(0,cant[i] + ti[i][j] - cans[j])*k+x);}}printf("%d\n",mincostmaxflow());}return 0;
}
/********************
3 2 1
4 7
2 4
8 9
4 4
3 3
3 3
2 8
12 3
14 6
-1 1 1
1 -1 1
1 1 -1
-1 5 5
5 -1 5
5 5 -1
********************/

转载于:https://www.cnblogs.com/acjiumeng/p/9719392.html

HDU - 4780费用流相关推荐

  1. hdu 3395(费用流,二分图的最大权匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3395 解题思路: 这个构图很容易出错,最开始都容易想,把每个点拆开,分为攻击和被攻击的,建图如下: 源 ...

  2. HDU 1533 费用流入门

    费用流 (最小费用最大流) 网络图中 每条边 多给出了 单位流量的费用 cost(u,v) ,当通过(u,v)的流量为f(u,v)f(u,v)f(u,v)时,需要花费 f(u,v)∗cost(u,v) ...

  3. hdu 5045 费用流

    题意:      网选赛的一个题目,当时各种超时各种wa,哎! 题意是有n个人m道题,每个人对每道题都有一个ac率,每相邻的n到题目必须n个人每人一道,顺序无所谓,上下的m%n道只要不出现一个人做两道 ...

  4. Random Maze HDU - 4067 费用流/可行流

    主要谈谈建图的原理给自己听 首先贪心出来的一个图上加的边都是可走的[修改边],这些修改边的反向边是用来在跑网络流的时候撤销修改的 换句话说,每条修改边都是备选项,是用来调整图上各点入度的 所以,既然是 ...

  5. hdu 2448 Mining Station on the Sea(最短路+费用流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2448 题意:给你一个由N个港口和M个海上油田构成的连通无向图(给出了图中所有的边和权值),现在给你N个 ...

  6. HDU Problem - 1533 Going Home(费用流板子题)

    题目链接 Problem Description On a grid map there are n little men and n houses. In each unit time, every ...

  7. HDU 5383 Yu-Gi-Oh!(费用流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5383 题意:游戏王同调召唤的方法,每只怪兽有等级和攻击力,两种不同类型的怪兽可以在一定限制下召唤出某一 ...

  8. HDU 4833 Best Financing 一脸费用流的dp

    原题:http://acm.hdu.edu.cn/showproblem.php?pid=4833 题意:中文题不解释... 解题思路: 首先以interest_rates为费用建图跑费用流是比较容易 ...

  9. HDU 3618 Good Plan(费用流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3618 Problem Description FJ has two same houses for r ...

最新文章

  1. linux剧集nfo生成器,精彩LINUX软件推荐
  2. SQL优化(二) 快速计算Distinct Count
  3. HALCON示例程序measure_ball_bond.hdev电路板焊点位置测量
  4. github哪些协议能商用_GitHub 上有哪些一般人也可以用的项目?
  5. 当我设计游戏服务器时,我在想些什么?(1)
  6. 如何获取当前显示的片段?
  7. opencv怎么2个摄像头_扭到腰该怎么办?5个处理要点要谨记,2招教你预防扭伤
  8. 软件项目管理案例教程第4版知识清单
  9. 闩锁效应Latch-up effect---Phsical cell---Welltap---SOI
  10. 魔百和服务器网站,【当贝市场】魔百盒首页诊断显示网络异常解决办法
  11. 实验数据 matlab,用MatlAB处理实验数据程序
  12. 2022 最新 R 语言 与 RStudio 安装配置教程
  13. stm32f030移植到stm32f072
  14. linux hdmi /dev/fb操作,HDMI接口学习笔记
  15. 生信识图 之 点图进阶-2(PCA)
  16. linux ftp上传目录,Linux中ftp不能上传文件/目录的解决办法
  17. mt7620 外置pa_openwrt在mt7620a芯片上对外置PA的支持
  18. oracle图书操作、sql语句查询+授权、视图、索引、表操作
  19. 运用阿里云地图实现经纬度转换为省市县
  20. SF-60/385/4PY智能浪涌保护器 带遥信功能 四川 重庆项目大力推荐应用 带通讯 上防雷系统平台

热门文章

  1. httpservletresponse 重定向浏览器不变的原因_JavaWeb——Servlet——请求转发与响应重定向...
  2. Fisher算法+两类问题
  3. [leetcode] 7. 整数反转
  4. 数据库期末总结笔记( 零基础 )-第二章 关系数据库
  5. python 正则表达式 速查表
  6. 杨辉三角形(简明易懂)
  7. js系列教程11-json、ajax(XMLHttpRequest)、comet、SSE、WebSocket全解
  8. 在Jupyter Notebook中运行R (附一系列疑难解答)
  9. 事态升级是什么意思_为什么有的人越到关键时刻越容易掉链子?记住不要有“赌徒心理”...
  10. 【原创】一点点雕虫小技脚本