bzoj 1061 志愿者招募(最小费用最大流)
[Noi2008]志愿者招募
Time Limit: 20 Sec Memory Limit: 162 MB
Submit: 3792 Solved: 2314
[Submit][Status][Discuss]
Description
Input
Output
仅包含一个整数,表示你所设计的最优方案的总费用。
Sample Input
2 3 4
1 2 2
2 3 5
3 3 2
Sample Output
HINT
1 ≤ N ≤ 1000,1 ≤ M ≤ 10000,题目中其他所涉及的数据均 不超过2^31-1。
表示并不懂为何这么建图,下面是大神的详细解读。
http://www.byvoid.com/blog/noi-2008-employee/#more-916 STO.
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <time.h>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#define inf 0x7fffffff
#define mod 10000
#define met(a,b) memset(a,b,sizeof a)
typedef long long ll;
using namespace std;
const int N=;
const int M=;
int n,m,cnt=,ans,T=;
int head[N],q[N],dis[N],from[N];
bool inq[N];
struct data {
int from,to,next,v,c;
} e[M];
void ins(int u,int v,int w,int c) {
e[++cnt].from=u;
e[cnt].to=v;
e[cnt].next=head[u];
head[u]=cnt;
e[cnt].v=w;
e[cnt].c=c;
}
void insert(int u,int v,int w,int c) {
ins(u,v,w,c);
ins(v,u,,-c);
}
bool spfa() {
int t=,w=;
for(int i=; i<=T; i++)dis[i]=inf;
q[t]=;
dis[]=;
inq[]=;
while(t!=w) {
int now=q[t];
t++;
if(t==)t=;
for(int i=head[now]; i; i=e[i].next)
if(e[i].v&&dis[now]+e[i].c<dis[e[i].to]) {
dis[e[i].to]=dis[now]+e[i].c;
from[e[i].to]=i;
if(!inq[e[i].to]) {
inq[e[i].to]=;
q[w++]=e[i].to;
if(w==)w=;
}
}
inq[now]=;
}
if(dis[T]==inf)return ;
return ;
}
void mcf() {
int x=inf;
for(int i=from[T]; i; i=from[e[i].from])
x=min(x,e[i].v);
for(int i=from[T]; i; i=from[e[i].from]) {
e[i].v-=x;
e[i^].v+=x;
ans+=e[i].c*x;
}
}
void init() {
scanf("%d%d",&n,&m);
int l=,r;
for(int i=; i<=n; i++) {
scanf("%d",&r);
int x=r-l;
if(x>)insert(,i,x,);
else insert(i,T,-x,);
insert(i+,i,inf,);
l=r;
}
insert(n+,T,l,);
for(int i=; i<=m; i++) {
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
insert(x,y+,inf,c);
}
}
int main() {
init();
while(spfa())mcf();
printf("%d",ans);
return ;
}
bzoj 1061 志愿者招募(最小费用最大流)的更多相关文章
- BZOJ 1061 志愿者招募(最小费用最大流)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1061 题意:申奥成功后,布布经过不懈努力,终于 成为奥组委下属公司人力资源部门的主管.布 ...
- bzoj 1061 志愿者招募 有上下界费用流做法
把每一天看作一个点,每一天的志愿者数目就是流量限制,从i到i+1连边,上下界就是(A[i],+inf). 对于每一类志愿者,从T[i]+1到S[i]连边,费用为招募一个志愿者的费用,流量为inf.这样 ...
- BZOJ 1061 志愿者招募 最小费用流&&线性规划建模
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1061 题目大意: 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主 ...
- BZOJ 1927 星际竞速(最小费用最大流)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1927 题意:一个图,n个点.对于给出的每条边 u,v,w,表示u和v中编号小的那个到编号 ...
- BZOJ 2424: [HAOI2010]订货(最小费用最大流)
最小费用最大流..乱搞即可 ------------------------------------------------------------------------------ #includ ...
- bzoj 1061 志愿者招募 费用流
详见BYV的博客,写的非常全面https://www.byvoid.com/blog/noi-2008-employee /************************************** ...
- BZOJ.3265.志愿者招募加强版(费用流SPFA)
题目链接 见上题. 每类志愿者可能是若干段,不满足那个...全幺模矩阵(全单位模矩阵)的条件,所以线性规划可能存在非整数解. 于是就可以用费用流水过去顺便拿个rank2 233. //20704kb ...
- BZOJ 1070: [SCOI2007]修车 [最小费用最大流]
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 4936 Solved: 2032[Submit][Status] ...
- BZOJ 1061 志愿者招募
http://www.lydsy.com/JudgeOnline/problem.php?id=1061 思路:可以用不等式的改装变成费用流. 将不等式列出,如果有负的常数,那么就从等式连向T,如果是 ...
随机推荐
- C# Process打开程序并移动窗口到指定位置
process.start只是按指定的参数来运行一个程序,而这个程序自己运行起来是什么样子的就不是Process所能处理的了,不过当程序运行起来后倒是可以通过Process的MainWindowHan ...
- POJ 1777 mason素数
题目大意: 给定数列 a1 , a2 , ... , an 希望找到一个 N = sigma(ai^ki) , (0<=ki<10) ,ki可随自己定为什么 只要保证N的因子和可以表示 ...
- OpenCV函数解读之groupRectangles
不管新版本的CascadeClassifier,还是老版本的HAAR检测函数cvHaarDetectObjects,都使用了groupRectangles函数进行窗口的组合,其函数原型有以下几个: C ...
- goldengate 12c 针对oracle 12c配置的主要变化
由于oracle 12c已经是多租户架构,在使用OGG同步的时候,需要考虑下面一些情况 一个 CDB包含多个PDB,源端部署的一个extract可访问所有pdb redo,理论上不需要每个pdb单独配 ...
- SharePoint 2013 运行在IIS 应用32位错误
问题描述: 今天有一个项目因为用了OWC11,没有64位的dll,因此IIS设置了“启用32位应用程序”为true. 如图: 详细操作见:http://www.cnblogs.com/cainiaog ...
- Oracle 中批量导入大量测试数据的方法
执行如下批处理命令: declare maxrecords constant int := 100000; i int := 1;begin for i in 1 .. 20000 loop ...
- msf生成shellcode
msfpayload windows/exec CMD = calc.exe EXITFUNC=thread C 在kali Linux2.0新版中msfpayload命令已删除,功能已集成到msfv ...
- Linux信号(signal) 机制分析
Linux信号(signal) 机制分析 [摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核 ...
- 利用DetachedCriteria实现模糊查询和分页
分类: Java-Developing 前段时间在做模糊查询,并利用数据库分页,DAO用hibernate实现,刚开始的时候 根据业务层的数据,拼hql语句进行查询,且不说要进行一些if判断,单 ...
- hadoop环境搭建遇到问题集锦
1 在hadoop的bin目录下, 运行hadoop version命令,提示“hadoop:没有此命令” 解决办法: ./hadoop version或者$HADOOP_HOME/bin放在PAT ...