bzoj3280 小R的烦恼

来源:互联网 发布:mac os 10.12原版镜像 编辑:程序博客网 时间:2024/06/04 17:44

(http://www.elijahqi.win/2017/12/26/bzoj3280-%E5%B0%8Fr%E7%9A%84%E7%83%A6%E6%81%BC/)
Description
小R最近遇上了大麻烦,他的程序设计挂科了。于是他只好找程设老师求情。善良的程设老师答应不挂他,但是要求小R帮助他一起解决一个难题。
问题是这样的,程设老师最近要进行一项邪恶的实验来证明P=NP,这个实验一共持续n天,第i天需要a[i]个研究生来给他搬砖。研究生毕竟也是人,所以雇佣研究生是需要钱的,机智的程设老师已经联系好了m所大学,第j所大学共有l[j]个研究生,同时雇佣这所大学的一个研究生需要p[j]元钱。
本来程设老师满心欢喜的以为,这样捡最便宜的max{a[i]}个研究生雇来,就可以完成实验;结果没想到,由于他要求硕士生们每天工作25个小时不许吃饭睡觉上厕所喝水说话咳嗽打喷嚏呼吸空气,因此一天下来给他搬砖的所有研究生都会进入濒死状态。濒死状态的研究生,毫无疑问,就不能再进行工作了。但是机智的老师早早联系好了k家医院,第i家医院医治一个濒死的研究生需要d[i]天,并且需要q[i]元钱。

现在,程设老师想要知道,最少花多少钱,能够在这n天中满足每天的需要呢?若无法满足,则请输出”impossible”。注意,由于程设老师良心大大的坏,所以他是可以不把濒死的研究生送去医院的!

Input
本题包含多组数据;第一行是一个数T(T<=11),表示数据组数,以下T组数据。
对于每一组数据,第一行三个数,n,m,k;
以下一行n个数,表示a[1]…a[n]
接着一行2m个数,表示l[1],p[1]…l[n],p[n]
接着一行2k个数,表示d[1],q[1]…d[n],q[n]
Output
对于每组数据以样例的格式输出一行,两个数分别表示第几组数据和最少钱数。
Sample Input
2
3 2 1
10 20 30
40 90 15 100
1 5
3 2 1
10 20 30
40 90 15 100
2 5
Sample Output
Case 1: 4650
Case 2: impossible
HINT
样例解释:买下90块钱的那40个研究生,另外再买10个100块钱的。这样,第一天用完的10个人全部送到医院,那么他们在第三天可以继续使用;同时,第二天和第三天都用新的研究生来弥补,这样一共需要花费40*90 + 10*100 + 5*10 = 4650元。
数据规模:

对于30%的数据中的每组数据,

满足n<=5,m,k<=2,其余数均小于等于100或者

n<=10,m,k<=10,其余数均小于等于20.

对于100%的数据

n,m,k<=50,其余数均小于等于100.
Source
网络流
wc这题输出格式坑我半天啊 这题和餐巾计划挺像的 但是区别在于这次人的来源不确定 可能是不同大学来的不同的人 费用不同 所以建图的时候我先考虑还是两排点 1~n表示我这次有多少个人濒临死亡 然后n+1~2*n表示 这次我需要多少个研究生 然后我从源点向这1~n,n+1~2*n向汇连a[i]容量 费用为0的边 因为啊 我肯定可以满足我的要求 要是不满足的话 显然我的流量是不守恒的 会输出Impossible 这个时候 为了满足我从不同大学来 所以我把他从源点向我第一天连所有大学的边 然后费用根据题目走好了 然后把n+1~2*n中 每个点都向后面连inf的边 表示我可以这个大学生不用 在后面的天才买来用 最后还得从每天濒临死亡的前一天向后一天建inf 因为可以今天不送医院后面送 然后所有k种医院 从当前这个点连向 后面能使用的那个需求点 跑最小费用流即可

#include<cmath>#include<queue>#include<cstdio>#include<cstring>#include<algorithm>#define N 110#define inf 0x3f3f3f3fusing namespace std;inline char gc(){    static char now[1<<16],*S,*T;    if (T==S){T=(S=now)+fread(now,1,1<<16,stdin);if (T==S) return EOF;}    return *S++;}inline int read(){    int x=0;char ch=gc();    while(ch<'0'||ch>'9') ch=gc();    while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=gc();}    return x; }int num=1,TT,T,n,m,k,a[N],h[N],f[N],flag[N],pre[N],path[N];struct node{    int y,z,next,c;}data[N*N];inline void insert1(int x,int y,int z,int c){    data[++num].y=y;data[num].z=z;data[num].next=h[x];data[num].c=c;h[x]=num;    data[++num].y=x;data[num].z=0;data[num].next=h[y];data[num].c=-c;h[y]=num;}inline bool spfa(){    memset(f,0x3f,sizeof(f));memset(flag,0,sizeof(flag));f[0]=0;flag[0]=1;memset(pre,-1,sizeof(pre));queue<int>q;q.push(0);    while(!q.empty()){        int x=q.front();q.pop();flag[x]=0;        for (int i=h[x];i;i=data[i].next){            int y=data[i].y,z=data[i].z,c=data[i].c;            if (f[x]+c<f[y]&&z){                f[y]=f[x]+c;pre[y]=x;path[y]=i;                if(!flag[y]) flag[y]=1,q.push(y);            }        }    }if(pre[T]==-1) return 0;else return 1;}int main(){    freopen("bzoj3280.in","r",stdin);    TT=read();int cnt=0;    while(TT--){        n=read();m=read();k=read();        memset(h,0,sizeof(h));num=1;int tot=0;T=2*n+1;        for (int i=1;i<=n;++i) a[i]=read(),insert1(0,i,a[i],0),tot+=a[i],insert1(i+n,T,a[i],0);        for (int i=1;i<=m;++i){int l=read(),p=read();insert1(0,1+n,l,p);}        for (int i=1;i<=k;++i){int d=read(),q=read();for (int j=1;j+d+1<=n;++j) insert1(j,j+d+n+1,inf,q);}        for (int i=1;i<n;++i) insert1(i,i+1,inf,0),insert1(i+n,i+n+1,inf,0);int ans=0,ans1=0;        while(spfa()){            int minn=inf,now=T;            while(now) minn=min(minn,data[path[now]].z),now=pre[now];ans1+=minn;now=T;            while(now){ans+=data[path[now]].c*minn;data[path[now]].z-=minn;data[path[now]^1].z+=minn;now=pre[now];}        } if (ans1<tot) printf("Case %d: impossible\n",++cnt);else printf("Case %d: %d\n",++cnt,ans);    }    return 0;}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 1蛇交txt 1蛇交目录 1蛇交阅读 1蛇交 蛇交腐国度 1蛇交高慎 蛇与人交magnet 人见蛇交三年必死是真的吗 梦见蛇咬人 两个蛇根好痛双性蛇人帝国 蛇人帝国 泡蛇酒20年咬人事件 2019蛇人桃花运有结局 蛇与人结合真实故事 什么人不适合喝蛇汤 银环蛇咬人伤口图片 蛇精男主太黏人 蛇泡酒两年后咬死人 守墓人老蛇 蛇身人首 蛇人俱乐部 人首蛇身 做实验变成蛇人 守墓人老蛇任务 路飞4档蛇人图片 属蛇婚姻 89年属蛇 属蛇命运 蛇仙 蛇侵广播剧 男子做饭遭蛇侵 蛇侵5只蛇攻 蛇侵 情男 蛇冠子 蛇冠 蛇叔 百大dj蛇叔 蛇院为什么受欢迎 高冷蛇先生x蠢萌仓鼠受 网王之我是小蛇受 蛇变