hdu2448 费用流
http://acm.hdu.edu.cn/showproblem.php?pid=2448
和那个在地图上回家的差不多~~~
station之间是无向的,port与station是有向的,因为进去就不能出来。
费用流建图,即可
#include <cstring>
#include <cstdio>
#include <queue>
#include <iostream>
#define inf 0x3f3f3f3f
#define MAXN 3000
#define MAXM 300000
using namespace std;
struct node
{int u,v,f,c;
};
node e[MAXM];
int first[MAXN],next[MAXM],cc;
int inq[MAXN],pre[MAXN],preedge[MAXN],d[MAXN];
inline void add_edge(int u,int v,int f,int c)
{e[cc].u=u;e[cc].v=v;e[cc].f=f;e[cc].c=c;next[cc]=first[u];first[u]=cc;cc++;e[cc].v=u;e[cc].u=v;e[cc].f=0;e[cc].c=-c;next[cc]=first[v];first[v]=cc;cc++;
}
int SPFA(int s,int t)
{memset(inq,0,sizeof(inq));memset(d,inf,sizeof(d));memset(pre,-1,sizeof(pre));memset(preedge,-1,sizeof(preedge));d[s]=0;queue<int> q;q.push(s);while(!q.empty()){int u=q.front();q.pop();inq[u]=0;int i;for(i=first[u];i!=-1;i=next[i]){int v=e[i].v;if(e[i].f){if(d[v]>d[u]+e[i].c){d[v]=d[u]+e[i].c;pre[v]=u;preedge[v]=i;if(!inq[v]){inq[v]=1;q.push(v);}}}}}if(d[t]>=inf)return 0;elsereturn 1;
}
int Min_Cost_Flow(int s,int t)
{int ans_flow=0,ans_cost=0,mm,tmp;while(SPFA(s,t)){mm=inf;int u=t;while(pre[u]!=-1){tmp=preedge[u];mm=min(mm,e[tmp].f);u=pre[u];}u=t;while(pre[u]!=-1){tmp=preedge[u];e[tmp].f-=mm;e[tmp^1].f+=mm;u=pre[u];}ans_flow+=mm;ans_cost+=mm*d[t];}return ans_cost;
}
int main()
{int n,m,k,p;while(scanf("%d%d%d%d",&n,&m,&k,&p)!=EOF){memset(first,-1,sizeof(first));memset(next,-1,sizeof(next));cc=0;int i;int s=0,t=n+m+1;for(i=1;i<=n;i++){add_edge(i+m,t,1,0);int a;scanf("%d",&a);add_edge(0,a,1,0);}for(i=1;i<=k;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);add_edge(a,b,inf,c);add_edge(b,a,inf,c);}for(i=1;i<=p;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);add_edge(b,a+m,1,c);}int res=Min_Cost_Flow(s,t);printf("%d\n",res);}return 0;
}
hdu2448 费用流相关推荐
- [BZOJ 1221][HNOI2001]软件开发(费用流)
Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...
- 费用流 -- 四川省赛F-Direction Setting [拆边成点+费用流]
题目链接 题目大意: 就是给你一个nnn个点mmm条边的无向图,每个点有个值是aia_iai现在你把每条边都赋予一个方向之后这个图就是有向图了,那么设第iii个点的入度是did_idi,现在设 D ...
- UVA1411 Ants(带权二分图的最大完美匹配、zkw费用流)
题解 给定一些黑点白点,要求一个黑点链接一个白点并且线段不相交(转成二分图最大权匹配使用费用流解决)<训练指南>P351 输出方案:满流即为答案(满流是指这条路的流量跑满了,也就是说edg ...
- 餐巾计划问题 线性规划与网络流24题之10 费用流
相关知识:最小费用(最大)流 问题描述: 一个餐厅在相继的N 天里, 每天需用的餐巾数不尽相同. 假设第i天需要ri块餐巾(i=1, 2,-,N).餐厅可以购买新的餐巾,每块餐巾的费用为p分:或者把旧 ...
- BZOJ1150[CTSC2007]数据备份Backup——模拟费用流+堆+链表
题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游 ...
- bzoj3171: [Tjoi2013]循环格(费用流)
传送门 其实这题的建图并不难(虽然我并没有想出来) 首先,每一个点的入度和出度必须为$1$ 那么我们考虑拆点 每个点的出度点向它能到达的点的入度点连边,容量$1$,如果方向为原来的方向则费用$0$否则 ...
- 洛谷 - P2045 - 方格取数加强版 - 费用流
原来这种题的解法是费用流. 从一个方格的左上走到右下,最多走k次,每个数最多拿走一次. 每次走动的流量设为1,起始点拆点成限制流量k. 每个点拆成两条路,一条路限制流量1,费用为价值相反数.另一条路无 ...
- 【BZOJ2245】[SDOI2011]工作安排 拆边费用流
[BZOJ2245][SDOI2011]工作安排 Description 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被 ...
- [Bzoj1061][Noi2008]志愿者招募(费用流)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1061 一开始疯狂想dp,然后队友走过来瞄一眼就告诉我像费用流,菜的真实,jpg. 一种比 ...
最新文章
- ACM 中常用的算法有哪些?
- 从源码分析DEARGUI之add_menu
- java.lang包 下
- 8597 石子划分问题 dpdp,只考虑第一次即可
- SSH pts 虚拟终端
- 修正TiAnlogDisplay显示的问题
- 安卓ondraw刷新视图_android播放动画时是否会调用被操作的视图的onDraw方法?
- red hat 查看mysql密码_Red Hat 下 MySQL root密码恢复
- Queue和BlockingQueue的使用以及使用BlockingQueue实现生产者-消费者
- 32位寄存器用法介绍
- 滴滴开源基于 React 的移动端开发组件库-Pile.js
- iphone刷android怎么刷机,不用刷机 让iPhone运行Android 6.0
- java html邮件_java发送html模板邮件
- Android Paint,Canvas api 详解
- 苹果手机投屏linux电脑,iphone怎么投屏到电脑?苹果手机投屏到电脑图文教程
- 图解PKCS#1——第四部分 签名验签方案
- zed相机拆机_TX1入门教程硬件篇-外接双目相机ZED
- 区块链技术在食品供应链领域的应用
- 题目:求1+2!+3!+...+20!的和
- 东师计算机应用基础18秋在线作业3,东师计算机应用基础18秋在线作业100分答案...
热门文章
- 杭州/北京内推 | 阿里达摩院灵瞳实验室招聘研究型算法实习生(可转正)
- 华为云城市峰会深圳站 · 华为云区块链助力金融创新
- rt-thread i2c 使用教程
- ubuntu系统怎么退出tty模式(开机自动进入)?(仅供参考)
- 解决excel(日期变数字)导入数据库(数字变日期)
- ORA-01422: exact fetch returns more than requested number of rows
- 密码学入门(2):对称密码
- 匈牙利离散(板子向)
- 东华大学 oj1——求长方形的面积和周长
- 漫说Android 中SurfaceView蕴含的美