[BZOJ1061][Noi2008]志愿者招募 线性规划+费用流
2024-10-19 16:44:06
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1061
根据题意列方程,然后用网络流解线性规划。
题解直接贴ByVoid的吧,太神了:https://www.byvoid.com/blog/noi-2008-employee/
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int INF=<<;
int inline readint(){
int Num;char ch;
while((ch=getchar())<''||ch>'');Num=ch-'';
while((ch=getchar())>=''&&ch<='') Num=Num*+ch-'';
return Num;
}
int n,m;
int A[];
int S,T;
int to[],ne[],w[],c[],fir[],cnt=;
void add(int a,int b,int x,int y=INF){
to[cnt]=b,w[cnt]=x,c[cnt]=y,ne[cnt]=fir[a],fir[a]=cnt++;
to[cnt]=a,w[cnt]=-x,c[cnt]=,ne[cnt]=fir[b],fir[b]=cnt++;
}
int dis[],pre[];
bool in[];
queue <int> q;
bool Spfa(){
memset(dis,/,sizeof(dis));
q.push(S);
in[S]=true;
dis[S]=;
int u;
while(!q.empty()){
u=q.front();
q.pop();
in[u]=false;
for(int i=fir[u];i!=-;i=ne[i]){
int v=to[i];
if(dis[v]>dis[u]+w[i]&&c[i]){
dis[v]=dis[u]+w[i];
pre[v]=i;
if(!in[v]){
q.push(v);
in[v]=true;
}
}
}
}
return dis[T]!=dis[];
}
void Mcmf(){
int cost=;
pre[S]=-;
while(Spfa()){
int f=INF;
for(int i=pre[T];i!=-;i=pre[to[i^]]) f=min(f,c[i]);
for(int i=pre[T];i!=-;i=pre[to[i^]]){
c[i]-=f;
c[i^]+=f;
}
cost+=dis[T]*f;
}
printf("%d\n",cost);
}
int main(){
n=readint();
m=readint();
for(int i=;i<=n;i++) A[i]=readint();
memset(fir,-,sizeof(fir));
S=n+;
T=n+;
for(int i=;i<=n+;i++){
if(A[i]>=A[i-]) add(S,i,,A[i]-A[i-]);
else add(i,T,,A[i-]-A[i]);
if(i>) add(i,i-,);
}
for(int i=;i<=m;i++){
int a=readint(),
b=readint(),
c=readint();
add(a,b+,c);
}
Mcmf();
return ;
}
最新文章
- db2 游标使用
- Wrangle – 响应式的,触摸友好的多选插件
- Angular.js为什么如此火呢?
- 如何为不定高度(height:auto)的元素添加CSS3 transition-property:height 动画
- git clone 出错SSL certificate problem, verify that the CA cert is OK.
- gem安装时出现 undefined method `size&#39; for nil:NilClass (NoMethodError) 的解决办法
- 2014.12.01 B/S之windows8.1下安装IIS
- cocos2d-x游戏开发(十六)帧动画
- JDK自己主动拆箱下,三目运算符的潜规则
- xml解析(4)
- HTML基本功之文档结构
- File System 之本地文件系统
- Go学习笔记03-附录
- LCA最近公共祖先(倍增版)
- python3-基础6
- 单色三角形(hdu-5072
- IOS 数据存储之 Core Data详解
- Linux学习笔记:Jenkins安装
- 【分享】熟练的Java程序员应该掌握哪些技术?
- 每日英语:How Your Knees Can Predict the Weather