zoj 3362(最大费用)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3904
思路:费用流的题,增加一个超级源点和一个超级汇点,然后就是连边了,对于每个城市,与汇点连边,容量为inf,花费(这里指收益)为商品在该城市的价值,然后对于图中给定的边,容量为cap,花费为-cost(负数代表花费),最后就是源点与城市1连边了,然后就是跑费用流了,求最大收益(当dist[vt]<0时直接退出)。
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<queue>
- using namespace std;
- #define MAXN 222
- #define inf 1<<30
- struct Edge{
- int v,cap,cost,next;
- }edge[MAXN*MAXN];
- int n,m,vs,vt,NE;
- int head[MAXN];
- void Insert(int u,int v,int cap,int cost)
- {
- edge[NE].v=v;
- edge[NE].cap=cap;
- edge[NE].cost=cost;
- edge[NE].next=head[u];
- head[u]=NE++;
- edge[NE].v=u;
- edge[NE].cap=;
- edge[NE].cost=-cost;
- edge[NE].next=head[v];
- head[v]=NE++;
- }
- bool mark[MAXN];
- int dist[MAXN],pre[MAXN],cur[MAXN];
- bool spfa(int vs,int vt)
- {
- memset(mark,false,sizeof(mark));
- fill(dist,dist+MAXN,-inf);
- dist[vs]=;
- queue<int>que;
- que.push(vs);
- while(!que.empty()){
- int u=que.front();
- que.pop();
- mark[u]=false;
- for(int i=head[u];i!=-;i=edge[i].next){
- int v=edge[i].v,cost=edge[i].cost;
- if(edge[i].cap>&&dist[u]+cost>dist[v]){
- dist[v]=dist[u]+cost;
- pre[v]=u;
- cur[v]=i;
- if(!mark[v]){
- mark[v]=true;
- que.push(v);
- }
- }
- }
- }
- return dist[vt]>;
- }
- int MinCostFlow(int vs,int vt)
- {
- int flow=,cost=;
- while(spfa(vs,vt)){
- int aug=inf;
- for(int u=vt;u!=vs;u=pre[u]){
- aug=min(aug,edge[cur[u]].cap);
- }
- flow+=aug,cost+=aug*dist[vt];
- for(int u=vt;u!=vs;u=pre[u]){
- edge[cur[u]].cap-=aug;
- edge[cur[u]^].cap+=aug;
- }
- }
- return cost;
- }
- int main()
- {
- int x,u,v,cap,cost;
- while(~scanf("%d%d",&n,&m)){
- vs=,vt=n+;
- NE=;
- memset(head,-,sizeof(head));
- for(int i=;i<=n;i++){
- scanf("%d",&x);
- Insert(i,vt,inf,x);
- }
- while(m--){
- scanf("%d%d%d%d",&u,&v,&cap,&cost);
- Insert(u,v,cap,-cost);
- Insert(v,u,cap,-cost);
- }
- Insert(vs,,inf,);
- printf("%d\n",MinCostFlow(vs,vt));
- }
- return ;
- }
zoj 3362(最大费用)的更多相关文章
- ZOJ 3362 Beer Problem(SPFA费用流应用)
Beer Problem Time Limit: 2 Seconds Memory Limit: 32768 KB Everyone knows that World Finals of A ...
- ZOJ 3362 Beer Problem
Beer Problem Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on ZJU. Original I ...
- zoj 3469 Food Delivery 区间dp + 提前计算费用
Time Limit: 2 Seconds Memory Limit: 65536 KB When we are focusing on solving problems, we usual ...
- 费用流 ZOJ 3933 Team Formation
题目链接 题意:两个队伍,有一些边相连,问最大组对数以及最多女生数量 分析:费用流模板题,设置两个超级源点和汇点,边的容量为1,费用为男生数量.建边不能重复建边否则会T.zkw费用流在稠密图跑得快,普 ...
- ZOJ 3792 Romantic Value 最小割(最小费用下最小边数)
求最小割及最小花费 把边权c = c*10000+1 然后跑一个最小割,则flow / 10000就是费用 flow%10000就是边数. 且是边数最少的情况.. #include<stdio. ...
- ZOJ 2404 Going Home 【最小费用最大流】
思路: 把房子和人看成点,加上源点和汇点. 源点和每个人连容量为1,权值为0的边. 每个人和每个房子连容量为1,权值为距离的边. 每个房子和汇点连容量为1,权值为0的边. #include<st ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- zoj 3537 Cake 区间DP (好题)
题意:切一个凸边行,如果不是凸包直接输出.然后输出最小代价的切割费用,把凸包都切割成三角形. 先判断是否是凸包,然后用三角形优化. dp[i][j]=min(dp[i][j],dp[i][k]+dp[ ...
- ZOJ 刷题记录 (。・ω・)ノ゙(Progress:31/50)
[热烈庆祝ZOJ回归] P1002:简单的DFS #include <cstdio> #include <cstring> #include <algorithm> ...
随机推荐
- ORACLE expdp/impdp详解(转)
ORCALE10G提供了新的导入导出工具,数据泵.Oracle官方对此的形容是:Oracle DataPump technology enables Very High-Speed movement ...
- MongoDB 日志太大怎么办?
MongoDB的日志增长的非常快,/var所在的空间立即就占满了,即便换到还有一个磁盘分区保存日志.日志还是增长的非常快.磁盘眼看要告磬. 有一个好办法,就是使用旋转日志. MongoDB的旋转日志有 ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第2章节--SharePoint 2013 App 模型概览 理解三个SharePoint 部署模型 Apps
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第2章节--SharePoint 2013 App 模型概览 理解三个SharePoint 部署模型 Apps ...
- ArcGIS 10 安装程序及破解文件
1.下载 ArcGIS 10 安装程序及破解文件 后面提供电驴的下载地址(可以使用迅雷.QQ旋风等下载工具下载),下载文件是一个光盘镜像文件:ArcGIS_Desktop10_122519.iso. ...
- SQL Prompt几个快捷键
推荐一个小插件,SQL Prompt,配合Microsoft SQL Server Management Studio,使用起来非常方便,同时再加上以下几个快捷键: (1)ctrl+5或F5,运行代码 ...
- js身份证验证算法
var validateIdCard=function (id, backInfo) { var info={ y: "1900", m: "01", d: & ...
- AutoFac文档8(转载)
目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 泛型 给定一个开放的泛 ...
- C++知识点 笔试常见
C++知识点 一.#include “filename.h”和#include <filename.h>的区别 #include “filename.h”是指编译器将从当前工作目录上开 ...
- python实现dict版图遍历
python实现dict版图遍历的示例. 代码: #_*_coding:utf_8_import sysimport osclass Graph(): def __init__(self, V, E) ...
- c#取得post和get的数据和模拟发送
可以放在控制器的入口函数中,这样载入就会被调用 asp.net mvc,get+post: public ActionResult Index() { ) { foreach (var item in ...