有很浓厚的熟悉感?餐巾计划问题?
不就是多了几个医院,相当于快洗部和慢洗部开了分店.

考虑建图:

如果把每一天拆成两个点,一个表示需求,另一个表示拥有的话.

显然就是一个两边的图,考虑如果我现在有人,但是可以不用,显然可以向后面一天传递.

如果我死了人,要救活,显然是需求向拥有连边.

然后就差不多了.直接跑费用流就好了.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<iostream>
using namespace std;
#define ll long long
#define re register
#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
inline int gi()
{
    int f=1,sum=0;char ch=getchar();
    while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    return f*sum;
}
typedef pair<int,int> pii;
const int N=50,Inf=1e9+10;
int front[N<<2],nxt[N*N<<2],to[N*N<<2],w[N*N<<2],c[N*N<<2],cnt,s,t,fa[N<<2],pre[N<<2],dis[N<<3],vis[N<<2],n,m,k,need;
queue<int>Q;
void Add(int u,int v,int val,int f){
    to[cnt]=v;nxt[cnt]=front[u];front[u]=cnt;w[cnt]=val;c[cnt++]=f;
    to[cnt]=u;nxt[cnt]=front[v];front[v]=cnt;w[cnt]=0;c[cnt++]=-f;
}
bool SPFA(){
    for(int i=0;i<=t;i++)dis[i]=Inf;
    dis[s]=0;Q.push(0);
    while(!Q.empty()){
        int u=Q.front();Q.pop();vis[u]=0;
        for(int i=front[u];i!=-1;i=nxt[i]){
            int v=to[i];
            if(w[i] && dis[v]>dis[u]+c[i]){
                dis[v]=dis[u]+c[i];fa[v]=u;pre[v]=i;
                if(!vis[v]){
                    vis[v]=1;Q.push(v);
                }
            }
        }
    }
    return dis[t]!=Inf;
}
pii McMf(){
    pair<int,int>ans;
    while(SPFA()){
        int di=Inf;
        for(int i=t;i!=s;i=fa[i])di=min(di,w[pre[i]]);
        ans.first+=di;ans.second+=di*dis[t];
        for(int i=t;i!=s;i=fa[i]){w[pre[i]]-=di;w[pre[i]^1]+=di;}
    }
    return ans;
}
int main()
{
    int T=gi(),Case=0;
    while(T--){Case++;printf("Case %d: ",Case);
        n=gi();s=0;t=n+n+1;
        m=gi();k=gi();need=0;
        memset(front,-1,sizeof(front));cnt=0;
        for(int i=1;i<=n;i++){
            int x=gi();need+=x;
            Add(s,i,x,0);Add(i+n,t,x,0);
        }
        for(int i=1;i<=m;i++){
            int x=gi(),y=gi();
            Add(s,n+1,x,y);
        }
        for(int i=1;i<=k;i++){
            int x=gi(),y=gi();
            for(int j=1;j<=n-x-1;j++)
                Add(j,j+x+n+1,Inf,y);
        }
        for(int i=1;i<n;i++)Add(i+n,i+n+1,Inf,0);
        pair<int,int>ans=McMf();
        if(ans.first<need)puts("impossible");
        else printf("%d\n",ans.second);
    }
    return 0;
}

【BZOJ3280】 小R的烦恼(费用流,建模)的更多相关文章

  1. 【bzoj3280】小R的烦恼 费用流

    题目描述 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要求小R帮助他一起解决一个难题. 问题是这样的,程设老师最近要进行一项邪恶的实验来证明P=N ...

  2. bzoj 3280: 小R的烦恼 费用流

    题目: Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要求小R帮助他一起解决一个难题. 问题是这样的,程设老师最近要进行一项 ...

  3. BZOJ3280: 小R的烦恼

    题解: 随便建一下图费用流就可以过吧... 代码: #include<cstdio> #include<cstdlib> #include<cmath> #incl ...

  4. bzoj3280: 小R的烦恼(最小费用最大流)

    Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要 求小R帮助他一起解决一个难题.问题是这样的,程设老师最近要进行一项邪恶的实 ...

  5. 【费用流】bzoj3280 小R的烦恼

    类似bzoj1221 http://www.cnblogs.com/autsky-jadek/p/4174087.html 只不过大学有多个,所以我们另开一个节点汇总所有'S->大学'的边,然后 ...

  6. 【BZOJ3280】小R的烦恼 最小费用最大流

    [BZOJ3280]小R的烦恼 Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要求小R帮助他一起解决一个难题. 问题是这样的 ...

  7. BZOJ_3280_小R的烦恼_最小费用最大流

    BZOJ_3280_小R的烦恼_最小费用最大流 Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要 求小R帮助他一起解决一个难 ...

  8. 【BZOJ】【3280】小R的烦恼

    网络流/费用流 和软件开发那题基本相同,只是多加了一个“雇佣研究生”的限制:不同价格的研究生有不同的数量…… 那么只需加一个附加源点,对每一种研究生连边 S->ss 容量为l[i],费用为p[i ...

  9. BZOJ 3280: 小R的烦恼 & BZOJ 1221: [HNOI2001] 软件开发

    3280: 小R的烦恼 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 399  Solved: 200[Submit][Status][Discuss ...

随机推荐

  1. collection tree protocol

    本文所属图书 > 传感网原理与技术 本书根据<高等院校物联网工程专业发展战略研究报告暨专业规范(试行)>和物联网工程本科专业的教学需要,结合传感网的最新发展及其应用现状编写而成.主要 ...

  2. Windows-universal-samples学习笔记系列五:Custom user interactions

    Custom user interactions Basic input Complex inking Inking Low latency input Simple inking Touch key ...

  3. 验证签名机制——java示例

    简单的验证公钥私钥签名认证: 公钥是对外公开的部分,私钥是不公开的部分,一般在项目开发中公钥是给用户,私钥是存于服务器上,二者中有一个加密,则需要另外一个来解密. 下面是java实现的一个比较简单的示 ...

  4. JS高级- OOP-ES5

    1. OOP 面向对象三大特点: 封装,继承,多态 封装: 问题: 构造函数可重用代码和结构定义,但无法节约内存 为什么: 放在构造函数内的方法定义,每new一次,都会反复创建副本——浪费内存 解决: ...

  5. Django的学习(六)————templates过滤器、Django shell、admin

    一.filter: 1.介绍: 写在模板中,属于Django的模板语言. 可以修改模板中的变量,从而显示不同的内容 2.使用: {{ value | filter }},且过滤器可以嵌套使用 < ...

  6. oracle 重建分区索引

    分区表的所有分区相当于一个单独的表. 创建在分区表上的索引,就相当于在所有分区上单独创建的索引(主键索引除外). 重建分区表的索引回报: ORA-14086:不能将分区索引作为整体重建. so,重建语 ...

  7. 2019.02.07 bzoj4784: [Zjoi2017]仙人掌(仙人掌+树形dp)

    传送门 题意:给一个无向连通图,问给它加边形成仙人掌的方案数. 思路: 先考虑给一棵树加边形成仙人掌的方案数. 这个显然可以做树形dp. fif_ifi​表示把iii为根的子树加边形成仙人掌的方案数. ...

  8. 牛客训练三:处女座的比赛(hash打表)

    题目链接:传送门 思路:由于MOD只有9983大小,所以四位小写字母的字符串组合有26+26^2+26^3+26^4=475254种组合. 所以只要每次枚举出从1到475254中的hash值对应的字符 ...

  9. 【RabbitMQ】三种类型交换器 Fanout,Direct,Topic(转)

    出处:https://blog.csdn.net/fxq8866/article/details/62049393 RabbitMQ服务器会根据路由键将消息从交换器路由到队列中,如何处理投递到多个队列 ...

  10. s4-3 CSMA

    载波侦听多路访问协议  CSMA:Carrier Sense Multiple Access 特点:"先听后发" 改进ALOHA协议的侦听/发送策略  分类 非持续式 持 ...