BZOJ.3265.志愿者招募加强版(费用流SPFA)
题目链接
见上题。
每类志愿者可能是若干段,不满足那个...全幺模矩阵(全单位模矩阵)的条件,所以线性规划可能存在非整数解。
于是就可以用费用流水过去顺便拿个rank2 233.
//20704kb 300ms
#include <queue>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
//#define gc() getchar()
#define MAXIN 300000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
const int N=1007,M=1000005,INF=0x3f3f3f3f;int src,des,n,m,S[N],T[N],Enum,H[N],nxt[M],fr[M],to[M],cap[M],cost[M],pre[N],dis[N];
char IN[MAXIN],*SS=IN,*TT=IN;inline int read()
{int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-'0',c=gc());return now;
}
inline void AddEdge(int u,int v,int w,int c)
{fr[++Enum]=u, to[Enum]=v, nxt[Enum]=H[u], H[u]=Enum, cap[Enum]=w, cost[Enum]=c;fr[++Enum]=v, to[Enum]=u, nxt[Enum]=H[v], H[v]=Enum, cap[Enum]=0, cost[Enum]=-c;
}
bool SPFA()
{static std::queue<int> q;static bool inq[N];memset(dis,0x3f,sizeof dis);dis[src]=0, q.push(src);while(!q.empty()){int x=q.front(); q.pop();inq[x]=0;for(int v,i=H[x]; i; i=nxt[i])if(cap[i] && dis[v=to[i]]>dis[x]+cost[i]){dis[v]=dis[x]+cost[i], pre[v]=i;if(!inq[v]) inq[v]=1, q.push(v);}}return dis[des]<INF;
}
int MCMF()
{int res=0, mn=INF;for(int i=des; i!=src; i=fr[pre[i]])mn=std::min(mn,cap[pre[i]]);for(int i=des,v=pre[i]; i!=src; i=fr[v],v=pre[i])res+=mn*cost[v], cap[v]-=mn, cap[v^1]+=mn;return res;
}int main()
{n=read(), m=read(), Enum=1, src=1, des=n+2;for(int i=1; i<=n; ++i) AddEdge(i,i+1,INF-read(),0);for(int i=1,k,c; i<=m; ++i){k=read();for(int j=1; j<=k; ++j) S[j]=read(),T[j]=read();c=read();for(int j=1; j<=k; ++j) AddEdge(S[j],T[j]+1,INF,c);}AddEdge(n+1,des,INF,0);int res=0;while(SPFA()) res+=MCMF();printf("%d\n",res);return 0;
}
转载于:https://www.cnblogs.com/SovietPower/p/9364197.html
BZOJ.3265.志愿者招募加强版(费用流SPFA)相关推荐
- BZOJ 3265 志愿者招募加强版 单纯形
题目大意:同1061 不过每类志愿者能工作的区间是多段 这是卡网络流?不明 总之把1061稍微改改就能过了- - #include <cmath> #include <cstdio& ...
- [线性规划 对偶原理 单纯形] BZOJ 3265 志愿者招募加强版
就是个裸题了 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring& ...
- [NOI2008] 志愿者招募 (费用流)
[NOI2008] 志愿者招募 (费用流) 题目描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过 ...
- P3980-[NOI2008]志愿者招募【费用流】
正题 题目链接:https://www.luogu.com.cn/problem/P3980 题目大意 nnn天,第iii天需要AiA_iAi个志愿者.有mmm种志愿者,第iii种从sis_isi ...
- [BZOJ1061] [NOI2008] 志愿者招募 - 最小费用最大流
大部分内容转自: BYVOID - NOI2008 志愿者招募 如果讲道理的话,就是说我们抽象一下这个模型--然后每条费用边就是连接起始日期和结束日期的边,也就是说这条边上的流量增加1,就要增加一个 ...
- 【BZOJ1061/3265】[Noi2008]志愿者招募/志愿者招募加强版 单纯形法
[BZOJ1061][Noi2008]志愿者招募 Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募 ...
- bzoj 1061 志愿者招募
1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 3038 Solved: 1882 [ Submit] ...
- BZOJ 4946: [Noi2017]蔬菜 模拟费用流
title BZOJ 4946 LUOGU 3826 简化题意: 定义了一种蔬菜为:\(ai,si,ci,xi\),意思是蔬菜的价格为 \(a_i\),第一份卖出时价格为 \(a_i+s_i\),一共 ...
- 洛谷 - P2045 - 方格取数加强版 - 费用流
原来这种题的解法是费用流. 从一个方格的左上走到右下,最多走k次,每个数最多拿走一次. 每次走动的流量设为1,起始点拆点成限制流量k. 每个点拆成两条路,一条路限制流量1,费用为价值相反数.另一条路无 ...
最新文章
- 如何在阿里云上安全的存放您的配置 - 续
- 【bzoj 2460 [BeiJing2011]元素】
- Java技术分享:集群环境下的定时任务
- appium--每次启动会重新安装的问题(没试过)
- 如何制作一个简单的游戏 Cocos2d x 2 0 4
- jquery遍历元素对象each方法
- 最长公共子序列问题解析
- MAC m1芯片 Ubuntn配置过程
- GD32F303调试小记(零)之工程创建与编译
- srt,ass,ssa三种字幕的区别
- VC打印机使用 win95环境的下例子测试
- 何谓dB、dBm、dBi
- 360浏览器兼容IE模式下打印去掉页眉页脚
- uboot引导kernel - 4 -gd bd详解
- 天冷服务器自动关机,天冷iphone自动关机怎么办 天冷iphone自动关机解决办法【详解】...
- 3an推客CPC怎么设置?3an推客推广效果怎么样
- 感知人工智能操作系统
- Mac电脑的自动切换输入法
- 玩客云刷甜糖(2022-7-26亲测)
- 基于STM32F103RCT6实现串口中断发送,使用环形队列
热门文章
- 全国计算机等级考试题库二级C操作题100套(第86套)
- -9 逆序输出一个整数的各位数字_【每日算法】基础算法——归并排序[求逆序对的数量](四)(思想很经典)...
- oracle 不等于某类,Oracle如何查询不等于某数值
- html php获取post数据格式,html - php文件无法得到POST过来的数据
- com 对象与其基础 rcw 分开后就不能再使用_如何使用 Kubeflow 机器学习流水线
- T.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.Reflectio
- java面试题-----------静态代码块和代码块和构造方法执行顺序
- idea自动生成not null判断语句
- 16个烧光你脑细胞的悖论
- 服务器系统玩dnf,win7系统玩dnf提示正在连接服务器的解决方法