记录编号 431176 评测结果 AAAAAAAAAAAA
题目名称 [网络流24题] 餐巾 最终得分 100
用户昵称 GravatarHzoi_Mafia 是否通过 通过
代码语言 C++ 运行时间 0.001 s
提交时间 2017-07-31 11:46:14 内存使用 0.10 MiB
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
struct edge{
	int e,n,flow,cost;
}a[20010];
int pre[410],tot;
inline void insert(int s,int e,int flow,int cost){
	a[tot].e=e;
	a[tot].flow=flow;
	a[tot].cost=cost;
	a[tot].n=pre[s];
	pre[s]=tot++;
}
int S(0),T;
int N,p,m,f,n,s;
int r[201];
int flow(0),ans(0),inf(0x7fffffff);
inline void build(){
	for(int i=1;i<=N;i++){
		insert(S,i,r[i],0),insert(i,S,0,0);
		insert(S,i+N,inf,p),insert(i+N,S,0,-p);
		insert(i+N,T,r[i],0),insert(T,i+N,0,0);
		if(i+m<=N)
			insert(i,i+m+N,inf,f),insert(i+m+N,i,0,-f);
		if(i+n<=N)
			insert(i,i+n+N,inf,s),insert(i+n+N,i,0,-s);
		if(i!=N)
			insert(i,i+1,inf,0),insert(i+1,i,0,0);
	}
}
int dis[410],fa[410],path[410];
bool vis[410];
inline bool bfs(){
	memset(vis,0,sizeof(vis));
	memset(dis,30,sizeof(dis));
	memset(fa,-1,sizeof(fa));
	queue<int>q;
	q.push(S);
	dis[S]=0;
	vis[S]=1;
	while(!q.empty()){
		int k(q.front());
		vis[k]=0;
		q.pop();
		for(int i=pre[k];i!=-1;i=a[i].n){
			int e(a[i].e);
			if(a[i].flow&&dis[e]>dis[k]+a[i].cost){
				dis[e]=dis[k]+a[i].cost;
				fa[e]=k;
				path[e]=i;
				if(!vis[e])
					q.push(e),vis[e]=1;
			}
		}
	}
	if(fa[T]==-1)
		return false;
	return true;
}
inline void dinic(){
	while(bfs()){
		int f(inf);
		for(int i=T;i!=S;i=fa[i])
			if(a[path[i]].flow<f)
				f=a[path[i]].flow;
		flow+=f;
		ans+=dis[T]*f;
		for(int i=T;i!=S;i=fa[i]){
			a[path[i]].flow-=f;
			a[path[i]^1].flow+=f;
		}
	}
}
inline int gg(){
	freopen("napkin.in","r",stdin);
	freopen("napkin.out","w",stdout);
	memset(pre,-1,sizeof(pre));
	scanf("%d",&N);
	T=(N<<1)+1;
	for(int i=1;i<=N;i++)
		scanf("%d",&r[i]);
	scanf("%d%d%d%d%d",&p,&m,&f,&n,&s);
	build();
	dinic();
	printf("%d",ans);
	return 0;
}
int K(gg());
int main(){;}