2017"百度之星"程序设计大赛 - 初赛(B)度度熊的交易计划
n个村庄m条带权路,权值为花费,村庄可以造东西卖东西,造完东西可以换地方卖,给出每个村庄造东西花费a和最多个数b、卖东西价值c和最多个数d,求最大收益。
裸的费用流。然而还WA了一发。很好。
建源向每个村庄连边(b,a),(b,a)表示容量b费用a,每个村庄向汇点连边(d,-c),村庄间有路就互相连边(inf,v),v为边权,然后就是最小费用流。
不是最小费用最大流!!把费用最大流SPFA中最后一句判断改成<0即可,因为>=0时的费用可以不要他。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<iostream>
using namespace std; int n,m,s,t;
#define maxn 10011
#define maxm 50011
struct Edge{int from,to,next,cap,flow,cost;};
const int inf=0x3f3f3f3f;
struct Graph
{
Edge edge[maxm];
int n,first[maxn],d[maxn],cur[maxn],le,cost,s,t;
bool inq[maxn],mark[maxn];
void clear() {memset(first,,sizeof(first));le=;cost=;}
void in(int x,int y,int cap,int cost)
{
Edge& e=edge[le];
e.from=x;e.to=y;e.cap=cap;e.flow=;
e.cost=cost;e.next=first[x];first[x]=le++;
}
void insert(int x,int y,int cap,int cost)
{
in(x,y,cap,cost);
in(y,x,,-cost);
}
bool SPFA()
{
memset(d,0x3f,*(n+));
int que[],head=,tail=;
que[]=s;inq[s]=;d[s]=;
while (head<tail)
{
const int now=que[head++];
if (head==) head=;
inq[now]=;
for (int i=first[now];i;i=edge[i].next)
{
Edge& e=edge[i];
if (e.cap>e.flow && d[e.to]>d[now]+e.cost)
{
d[e.to]=d[now]+e.cost;
if (!inq[e.to])
{
que[tail++]=e.to;
inq[e.to]=;
if (tail==) tail=;
}
}
}
}
return d[t]<;
}
int dfs(int x,int a)
{
if (x==t || !a) {cost+=a*d[t];return a;}
mark[x]=;
int flow=,f;
for (int& i=cur[x];i;i=edge[i].next)
{
Edge& e=edge[i];
if (!mark[e.to] && d[e.to]==d[x]+e.cost && (f=dfs(e.to,min(a,e.cap-e.flow)))>)
{
flow+=f;
e.flow+=f;
edge[i^].flow-=f;
a-=f;
if (!a) break;
}
}
// mark[x]=0;
return flow;
}
int MCMF(int s,int t)
{
this->s=s;this->t=t;
int flow=;cost=;
memset(mark,,sizeof(mark));
memset(inq,,sizeof(inq));
while (SPFA())
{
memset(mark,,n+);
for (int i=;i<=n;i++) cur[i]=first[i];
flow+=dfs(s,inf);
}
return cost;
}
}g;
int a,b,c,d;
int main()
{
while (scanf("%d%d",&n,&m)==)
{
g.clear();g.n=n+;s=n+;t=s+;
for (int i=;i<=n;i++)
{
scanf("%d%d%d%d",&a,&b,&c,&d);
g.insert(s,i,b,a);
g.insert(i,t,d,-c);
}
for (int i=;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if (a==b) continue;
g.insert(a,b,inf,c);
g.insert(b,a,inf,c);
}
printf("%d\n",-g.MCMF(s,t));
}
return ;
}
2017"百度之星"程序设计大赛 - 初赛(B)度度熊的交易计划的更多相关文章
- 2017"百度之星"程序设计大赛 - 资格赛 1002 度度熊的王国战略
全局最小割 Stoer-Wagner (SW算法)优化 优化吃藕了,感谢放宽时限,感谢平板电视 (pb_ds) #include <iostream> #include <cstdi ...
- HDU 6118 度度熊的交易计划 【最小费用最大流】 (2017"百度之星"程序设计大赛 - 初赛(B))
度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 6119 小小粉丝度度熊 【预处理+尺取法】(2017"百度之星"程序设计大赛 - 初赛(B))
小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 6114 Chess 【组合数】(2017"百度之星"程序设计大赛 - 初赛(B))
Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 6109 数据分割 【并查集+set】 (2017"百度之星"程序设计大赛 - 初赛(A))
数据分割 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 6108 小C的倍数问题 【数学】 (2017"百度之星"程序设计大赛 - 初赛(A))
小C的倍数问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 6122 今夕何夕 【数学公式】 (2017"百度之星"程序设计大赛 - 初赛(A))
今夕何夕 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))
度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 2017"百度之星"程序设计大赛 - 初赛(A) [ hdu 6108 小C的倍数问题 ] [ hdu 6109 数据分割 ] [ hdu 6110 路径交 ] [ hdu 6112 今夕何夕 ] [ hdu 6113 度度熊的01世界 ]
这套题体验极差. PROBLEM 1001 - 小C的倍数问题 题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6108 (2017"百度之星 ...
- [SinGuLaRiTy] 2017 百度之星程序设计大赛 初赛B
[SinGuLaRiTy-1037] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. Chess Time Limit: 2000/1000 ...
随机推荐
- 【学习笔记】深入理解js原型和闭包(2)——函数和对象的关系
上文(深入理解jS原型和闭包(1)——一切都是对象)已经提到,函数就是对象的一种,因为通过instanceof函数可以判断. var fn = function () { }; console.log ...
- ArcGIS二次开发之读取遥感图像像素值的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 首先是读取遥感图像的R.G.B波段数据的做法.读取R.G.B波段数据的像素值主要通过IRaster接口的Read方法在 ...
- 重新部署mysql遇到的问题
Windows 2008 Server R2 MySql: 5.7 下载Mysql. 配置mysql环境变量 注册mysql服务.(mysqld install) 移除注册,sc delete mys ...
- 07/29/2013 02:10:02 AM - CMDPHP: Poller[0] Host[6] DS[10] WARNING: Result from SNMP not valid. Partial Result: U
snmpwalk -c public -v2c 客户端ip地址 自定义的oid 能取到数据,但是服务器端就是图片一片空白 rrdtool fetch 文件名.rrd 查看到的全都是nan cac ...
- 移动端超级好用的reset.css(只做参考哦具体以你们实际项目需求为准)
html { color: #333; /*规定主色调,依据业务场景(非必须)*/ background: #F6F6F6; /*规定主背景,依据业务场景(非必须)*/ overflow-y: aut ...
- Tomcat7的安装与配置
Tomcat的安装及配置我曾经使用过tomcat,并实现了一个简单的servlet程序.没想到再次安装tomcat的时候用浪费了我大半天的时间.我想有必要做个总结,否则下次不知又要花费我多少时间. 1 ...
- docker 的容器入门
Linux Namespace LXC所实现的隔离性主要是来自kernel的namespace, 其中pid, net, ipc, mnt, uts 等namespace将container的进程, ...
- Vue 几种常见开局方式
vue的开局方式五花八门,这里列几种常见的. 我们先建立一个app.vue来当入口文件,即所有页面都会以这个组件为模板. <template> <div id="app&q ...
- xcode中自定义log打印
打印内容包括 在哪个文件中 ? 在哪个方法中? 将要执行什么操作? // 此打印实现前提: // 1.在.pch文件中实现自定义log打印方法,log名换为LCLog // 2.定义一个宏obje ...
- ios之@class
objective-c中,当一个类使用到另一个类时,并且在类的头文件中需要创建被引用的指针时, 如下面代码: A.h文件 C代码 #import "B.h" @interfac ...