bzoj3280 小R的烦恼(费用流,类似餐巾计划)

来源:互联网 发布:使用sql语句创建用户 编辑:程序博客网 时间:2024/06/05 21:16

把每一天拆成两个点,像餐巾计划那题一样的建图,跑最小费用流就可以了。

#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 110inline int read(){    int x=0,f=1;char ch=getchar();    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();    return x*f;}int n,m,K,h[N],num=1,dis[N],path[N],T=107,s=101,tot=0;bool inq[N];struct edge{    int to,next,w,c;}data[6000];inline void add(int x,int y,int w,int c){    data[++num].to=y;data[num].next=h[x];h[x]=num;data[num].w=w;data[num].c=c;    data[++num].to=x;data[num].next=h[y];h[y]=num;data[num].w=0;data[num].c=-c;}inline bool spfa(){    deque<int>q;memset(dis,inf,sizeof(dis));memset(path,0,sizeof(path));    q.push_back(0);inq[0]=1;dis[0]=0;    while(!q.empty()){        int x=q.front();q.pop_front();inq[x]=0;        for(int i=h[x];i;i=data[i].next){            int y=data[i].to;if(!data[i].w) continue;            if(dis[x]+data[i].c<dis[y]){                dis[y]=dis[x]+data[i].c;path[y]=i;                if(!inq[y]){                    if(!q.empty()&&dis[y]<dis[q.front()]) q.push_front(y);                    else q.push_back(y);inq[y]=1;                }            }        }    }return path[T];}int main(){//  freopen("a.in","r",stdin);    int tst=read();    for(int owo=1;owo<=tst;++owo){        n=read();m=read();K=read();num=1;memset(h,0,sizeof(h));tot=0;        int ans=0,mxflow=0;printf("Case %d: ",owo);        for(int i=1;i<=n;++i){            int x=read();tot+=x;add(0,i,x,0);add(i+n,T,x,0);        }for(int i=1;i<=m;++i){            int x=read();add(0,s,x,read());        }for(int i=1;i<=K;++i){            int x=read(),val=read();            for(int j=1;j+x+1<=n;++j) add(j,j+x+1+n,inf,val);        }for(int i=1;i<n;++i) add(i,i+1,inf,0),add(s,i+n,inf,0);add(s,n+n,inf,0);        while(spfa()){            int low=inf,now=T;            while(path[now]) low=min(low,data[path[now]].w),now=data[path[now]^1].to;            mxflow+=low;ans+=low*dis[T];now=T;            while(path[now]) data[path[now]].w-=low,data[path[now]^1].w+=low,now=data[path[now]^1].to;        }if(mxflow!=tot) puts("impossible");        else printf("%d\n",ans);    }return 0;}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 年妃传 为妃三十年网盘 为妃三十年 她与灯 唐山市曹妃甸首钢2018年招聘 素年无安生 十四妃 十年相思尽 旖旎萌妃 年妃进化录 那拉漠暄 故宫年妃的画像很漂亮 康熙为什么三十年不见良妃 2019年织田真子免费播放 倒插门三年无子韩三千 松下纱荣子2019年 1960年易子相食事件 松下纱荣子2019年1月作品 松下纱荣子2019年品 松下纱荣子2019年作品 江城子十年生死两茫茫 2018年喜得贵子宴请通知短信 第子苍髯年八十 年增女房柏木舞子在线播放 松下纱荣子2019 有生之年若相欠秦子易 2018年3年级语文卷子上册卷子 年字笔顺 结婚十年感言10字左右 年字的笔顺 大学三年规划800字 2018年国庆节演讲稿100字左右 2018年国庆节日记300字 2018年贫困生认定申请书800字 年字部首 2018年小学生国庆演讲稿150字 2019年国庆观后感400字作文 独体字 年字的部首 2018年国庆节作文450字 大学三年规划300字 车辆年审 驾驶证年审 汽车年审 摩托车年审