博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ 1221】 [HNOI2001] 软件开发
阅读量:5229 次
发布时间:2019-06-14

本文共 2610 字,大约阅读时间需要 8 分钟。

【链接】

【题意】

在这里输入题意

【题解】

/*    设一个超级源点S和超级汇点T    S和2*i-1各连一条容量为ni的边。        花费为0        表示每天都会产生ni条要洗的毛巾    S和2*i各连一条容量为INF的边        花费为f        表示新买毛巾用    2*i-1和2*(i+a)连容量为INF的边        花费为fa    2*i-1和2*(i+b)连容量为INF的边        花费为fb    表示用完的毛巾消毒。    当然。用完的毛巾还能不马上消毒。    所以    2*i-1和2*(i+1)-1连容量为INF的边。花费为0    然后对于2*i,每个点都和汇点T连容量为ni的边。    表示每天要用的毛巾个数。    这样满流的时候就是符合要求的了。    跑个费用流就可以了。*/

边数一定要谨慎算。。

【代码】

#include 
#define LL long long#define rep1(i,a,b) for (int i = a;i <= b;i++)#define rep2(i,a,b) for (int i = a;i >= b;i--)#define all(x) x.begin(),x.end()#define pb push_back#define ms(x,y) memset(x,y,sizeof x)#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1using namespace std;const double pi = acos(-1);const int dx[4] = {0,0,1,-1};const int dy[4] = {1,-1,0,0};const int N = 2e3;const int M = 2e4;const int INF = 0x3f3f3f3f;struct abc{ int from,en,flow,nex,cost;};int n,A,B,F,FA,FB,fir[N+100],dis[N+100],pre[N+100],mi[N+100],totm,a[N+100],ans;bool inq[N+10];queue
dl;abc bian[M];void add(int x,int y,int flow,int cost){ bian[totm].nex = fir[x]; fir[x] = totm; bian[totm].from = x; bian[totm].en = y; bian[totm].cost = cost; bian[totm].flow = flow; totm++; bian[totm].nex = fir[y]; fir[y] = totm; bian[totm].from = y; bian[totm].en = x; bian[totm].cost = -cost; bian[totm].flow = 0; totm++;}bool spfa(int s,int t){ ms(dis,INF),ms(inq,0),ms(mi,INF); dis[s] = 0,inq[s] = 1; dl.push(s); pre[t] = -1; while (!dl.empty()){ int x = dl.front(); inq[x] = false; dl.pop(); for (int i = fir[x];i!=-1;i = bian[i].nex){ int y = bian[i].en; if (bian[i].flow && dis[y] > dis[x] + bian[i].cost){ dis[y] = dis[x] + bian[i].cost; mi[y] = min(bian[i].flow,mi[x]); pre[y] = i; if (!inq[y]){ inq[y] = true; dl.push(y); } } } } if (pre[t]==-1) return false; int now = t; while (now != s){ int temp = pre[now]; bian[temp].flow -= mi[t]; bian[temp^1].flow += mi[t]; now = bian[temp].from; ans += mi[t]*bian[temp].cost; } return true;}int main(){ #ifdef LOCAL_DEFINE freopen("rush_in.txt", "r", stdin); #endif ios::sync_with_stdio(0),cin.tie(0); ms(fir,255); cin >> n >> A >> B >> F >> FA >> FB; for (int i = 1;i <= n;i++) cin >> a[i]; for (int i = 1;i <= n;i++) { add(0,2*i-1,a[i],0); add(0,2*i,INF,F); if (i

转载于:https://www.cnblogs.com/AWCXV/p/8968934.html

你可能感兴趣的文章
git报错:failed to push some refs to 'git@github.com:JiangXiaoLiang1988/CustomerHandl
查看>>
Eureka高可用,节点均出现在unavailable-replicas下
查看>>
day 21 - 1 包,异常处理
查看>>
机器学习等知识--- map/reduce, python 读json数据。。。
查看>>
字符串编码
查看>>
预编译语句(Prepared Statements)介绍,以MySQL为例
查看>>
Noip2011提高组总结
查看>>
Java异常之try,catch,finally,throw,throws
查看>>
spring的配置文件详解
查看>>
Spring框架第一篇之Spring的第一个程序
查看>>
操作文件
查看>>
.net core 12
查看>>
SQL-android uri的使用(转载)
查看>>
数字pid笔记(1)
查看>>
一步一步学Linq to sql(六):探究特性
查看>>
[Everyday Mathematics]20150107
查看>>
【原】android启动时白屏或者黑屏的问题
查看>>
[原]unity3d 纹理旋转
查看>>
Automating hybrid apps
查看>>
java虚拟机---内存
查看>>