题目链接

戳我

\(Solution\)

这道题很像餐巾计划啊。

  • 首先将每天拆成\(x\)和\(x'\),\(S->x\)流量为\(a_i\),费用为\(0\)表示一天下来有\(a_i\)个濒死的人, 再将\(x'->T\)流量为\(a_i\)表示一天需要有\(a_i\)个人
  • 对于每个学校新建一个节点,将\(S\)和他相连流量为\(l_i\),在将这个节点和\(x'\)相连流量为\(inf\),费用为\(p_i\)表示每天可以在学校中选人
  • 然后在将\(x\)连向\(x+1\),流量为\(inf\),费用为\(0\)表示将濒死的人留到第二天。
  • \(x\)连向\(x'+d_i+1\),流量为\(inf\),费用为\(q_i\)表示将濒死的人送进医院在第\(d_i+1\)的时候出院

\(Code\)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=1e9+7;
int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
f=(c=='-')?-1:1,c=getchar();
while(c>='0'&&c<='9')
x=x*10+c-'0',c=getchar();
return x*f;
}
struct node{
int to,next,v,w;
}a[1000001];
int dis[10001],f[10001],pre[10001],fa[10001],s,t=10000,head[10001],cnt;
void add(int x,int y,int c,int v){
a[++cnt].to=y,a[cnt].next=head[x],a[cnt].v=c,a[cnt].w=v,head[x]=cnt;
a[++cnt].to=x,a[cnt].next=head[y],a[cnt].v=0,a[cnt].w=-v,head[y]=cnt;
}
queue<int>q;
int spfa(){
q.push(s);
memset(dis,127,sizeof(dis));
memset(f,0,sizeof(f));
f[s]=1,dis[s]=0;
int Inf=dis[s+1];
while(!q.empty()){
int now=q.front();
q.pop();
f[now]=0;
for(int i=head[now];i;i=a[i].next){
int v=a[i].to;
if(dis[v]>dis[now]+a[i].w&&a[i].v){
dis[v]=dis[now]+a[i].w,pre[v]=i,fa[v]=now;
if(!f[v])
f[v]=1,q.push(v);
}
}
}
if(dis[t]!=Inf)
return 1;
return 0;
}
int ans1,ans,x,y;
void anser(){
ans1=0,ans=0;
while(spfa()){
int minx=2147483647;
for(int i=t;i!=s;i=fa[i])
minx=min(minx,a[pre[i]].v);
ans+=minx,ans1+=dis[t]*minx;
for(int i=t;i!=s;i=fa[i])
a[pre[i]].v-=minx,(pre[i]%2)?a[pre[i]+1].v+=minx:a[pre[i]-1].v+=minx;
}
}
int main(){
int T=read();
for(int tt=1;tt<=T;tt++){
memset(head,0,sizeof(head)),cnt=0;
int n=read(),m=read(),k=read(),sum=0;
for(int i=1;i<=n;i++){
x=read(),add(s,i,x,0),add(i+n,t,x,0),sum+=x;
if(i<n)
add(i,i+1,inf,0);
}
for(int j=1;j<=m;j++){
x=read(),y=read();
add(s,j+n+n,x,0);
for(int i=1;i<=n;i++)
add(j+n+n,i+n,inf,y);
}
for(int j=1;j<=k;j++){
x=read()+1,y=read();
for(int i=1;i<n;i++)
if(i+x<=n)
add(i,i+x+n,inf,y);
}
anser();
if(ans!=sum)
printf("Case %d: impossible\n",tt);
else
printf("Case %d: %d\n",tt,ans1);
}
}

「BZOJ 3280」小R的烦恼的更多相关文章

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

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

  2. Solution -「BZOJ 4316」小C的独立集

    \(\mathcal{Description}\)   Link.   求包含 \(n\) 个结点 \(m\) 条边的仙人掌的最大独立集.   \(n\le5\times10^4\),\(m\le6\ ...

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

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

  4. BZOJ3280: 小R的烦恼

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

  5. 「BZOJ 4289」 PA2012 Tax

    「BZOJ 4289」 PA2012 Tax 题目描述 给出一个 \(N\) 个点 \(M\) 条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点 \(1\) 到点 \( ...

  6. 「BZOJ 2534」 L - gap字符串

    「BZOJ 2534」 L - gap字符串 题目描述 有一种形如 \(uv u\) 形式的字符串,其中 \(u\) 是非空字符串,且 \(v\) 的长度正好为 \(L\), 那么称这个字符串为 \( ...

  7. 「国家集训队」小Z的袜子

    「国家集训队」小Z的袜子 传送门 莫队板子题. 注意计算答案的时候,由于分子分母都要除以2,所以可以直接约掉,这样在开桶算的时候也方便一些. 参考代码: #include <algorithm& ...

  8. 「BZOJ 2956」模积和

    「BZOJ 2956」模积和 令 \(l=\min(n,m)\).这个 \(i\neq j\) 非常不优雅,所以我们考虑分开计算,即: \[\begin{aligned} &\sum_{i=1 ...

  9. 「BZOJ 4228」Tibbar的后花园

    「BZOJ 4228」Tibbar的后花园 Please contact lydsy2012@163.com! 警告 解题思路 可以证明最终的图中所有点的度数都 \(< 3\) ,且不存在环长是 ...

随机推荐

  1. 圆周率的现代计算机求法(C语言) Lebal:research

    C语言求圆周率π 公式法1 #include <stdio.h> #include <math.h> int main(){ float term,result=1; int ...

  2. Elasticsearch5.6安装

    Elasticsearch5.6安装 1.下载 5.6.8 sudo curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/e ...

  3. StarkSoft题库管理系统

    一.功能介绍    1.自定义试题库管理系统目录.难易程度,题型,知识库等.    2.试题录入.    3.强大的试题编辑功能,并与通常应用编辑工具有共通.    4.灵活的试卷构造功能,用户可自定 ...

  4. C# 通用类型转换方法

    在程序开发过程中经常需要进行数据的类型转换,而且如果一个字段的类型改成另一个类型时,所有相关的类型转换的地方都要跟着修改,不但造成了很多重复转换的代码而且修改字段类型时额外修改相关转换代码的工作量也很 ...

  5. 参数传递中编码问题(Get/Post 方式)(三)

    自己总结的:     GET方式:      1.提交方式为GET时,数据是放在请求HEADER头中的,且将数据与URL拼接后,浏览器会对拼接后的url进行编码,编码方式为浏览器默认的编码,      ...

  6. kali下安装go环境

    1.安装go 下载安装包,命令:wget -c https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz 下载完后,解压到 /u ...

  7. [原创]20行ruby代码实现依赖注入框架

    我需要依赖注入 业余时间开发的娱乐项目 (为了练习使用ruby语言) 遵循SRP原则,业务逻辑拆分由各个service类型提供,假设存在如下几个类型 GameService 封装主要游戏业务逻辑 Us ...

  8. OCX RegSvr32 error

    [Window Title]RegSvr32 [Content]The module "tt.ocx" failed to load. Make sure the binary i ...

  9. jquery-attr与prop

    问题:经常使用jQuery插件的attr方法获取checked属性值,获取的值的大小为未定义,此时可以用prop方法获取其真实值,下面介绍这两种方法的区别: 1.通过prop方法获取checked属性 ...

  10. 【282】◀▶ arcpy.mapping 常用函数说明

    arcpy.mapping 教程入门 arcpy.mapping 指导原则 按字母顺序排序的 arcpy.mpping 类列表 按字母顺序排序的 arcpy.mpping 函数列表 按字母顺序排序的 ...