ZOJ 3229 Shoot the Bullet | 有源汇可行流
题目:
射命丸文要给幻想乡的居民照相,共照n天m个人,每天射命丸文照相数不多于d个,且一个人n天一共被拍的照片不能少于g个,且每天可照的人有限制,且这些人今天照的相片必须在[l,r]以内,求是否有可行解,如果有则输出最多照片数,并且输出每天每个可以被照的人的被照的照片数。
题解:
建个源点向每天连容量为[0,d],每天向每个人连[l,r],每个人向汇点连[g,INF]
我们已经建好了一个有源汇的有上下界网络
我们再从T向S连[0,INF]就变了一个无源汇!
这个时候我们套用无源汇模板即可
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define N 1505
#define M 750005
#define INF 0x3f3f3f3f
using namespace std;
int read()
{
int ret=,neg=;char j=getchar();
for (;j>'' || j<'';j=getchar())
if (j=='-') neg=-;
for (;j>='' && j<='';j=getchar())
ret=ret*+j-'';
return ret*neg;
}
struct adj {int nxt,v,w;}e[M];
int head[N],du[N],id[][],low[][],lev[N],cur[N],dis[N];
int sum,ans,ecnt=,S,T,n,m,St,Ed;
queue <int> q;
void add(int u,int v,int w)
{
e[++ecnt].v=v;e[ecnt].w=w;e[ecnt].nxt=head[u];head[u]=ecnt;
e[++ecnt].v=u;e[ecnt].w=;e[ecnt].nxt=head[v];head[v]=ecnt;
}
void init()
{
sum=ans=;ecnt=;
memset(head,,sizeof(head));
memset(du,,sizeof(du));
memset(id,,sizeof(id));
}
bool Bfs()
{
while (!q.empty()) q.pop();
for (int i=;i<=T;i++)
cur[i]=head[i],dis[i]=-;
dis[S]=;q.push(S);
while (!q.empty())
{
int u=q.front();q.pop();
for (int i=head[u],v;i;i=e[i].nxt)
if (e[i].w && dis[v=e[i].v]==-)
{
dis[v]=dis[u]+,q.push(v);
if (v==T) return ;
}
}
return ;
}
int Dfs(int u,int flow)
{
if (u==T) return flow;
int ret=,delta;
for (int &i=cur[u],v;i;i=e[i].nxt)
if (e[i].w && dis[v=e[i].v]==dis[u]+)
{
delta=Dfs(v,min(e[i].w,flow-ret));
if (delta)
{
e[i].w-=delta;
e[i^].w+=delta;
ret+=delta;
if (ret==flow) break;
}
}
return ret;
}
int main()
{
while (scanf("%d%d",&n,&m)!=EOF && n)
{
St=m+n+,Ed=m+n+;
init();
for (int i=,w;i<=m;i++)
add(i,Ed,INF-(w=read())),du[i]-=w,du[Ed]+=w;
for (int i=m+,c,d;i<=m+n;i++)
{
c=read();d=read();
add(St,i,d);
for (int j=;j<=c;j++)
{
int t=read()+,l=read(),r=read();
add(i,t,r-l);du[i]-=l;du[t]+=l;
id[i-m][t]=ecnt;low[i-m][t]=l;
}
}
int h1=head[St],h2=head[Ed];
add(Ed,St,INF);
S=Ed+;T=S+;
for (int i=;i<=m+n+;i++)
if (du[i]>) add(S,i,du[i]),sum+=du[i];
else if (du[i]<) add(i,T,-du[i]);
while (Bfs()) ans+=Dfs(S,INF);
if (ans!=sum) puts("-1");
else
{
head[S]=head[T]=-;
head[St]=h1;head[Ed]=h2;
S=St;T=Ed;
while (Bfs()) ans+=Dfs(S,INF);
printf("%d\n",ans);
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
if (id[i][j])
printf("%d\n",e[id[i][j]].w+low[i][j]);
}
putchar('\n');
}
return ;
}
ZOJ 3229 Shoot the Bullet | 有源汇可行流的更多相关文章
- ZOJ 3229 Shoot the Bullet(有源汇上下界最大流)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3442 题目大意: 一个屌丝给m个女神拍照,计划拍照n天,每一天屌丝给 ...
- ZOJ 3229 Shoot the Bullet [上下界最大流]
ZOJ 3229 Shoot the Bullet 题意:此生无悔入东方 上下界最大流 spj挂掉了我也不知道对不对,把代码放这里吧以后正常了可能会评测一下 #include <iostream ...
- ZOJ 3229 Shoot the Bullet (有源有汇有上下界最大流)
题意:一个人要给女孩子们拍照,一共 n 天,m 个女孩子,每天他至多拍 d[i] 张照片,每个女孩子总共要被至少拍 g[i] 次.在第 i 天,可以拍 c[i] 个女孩子,c[i] 个女孩子中每个女孩 ...
- zoj 3229 Shoot the Bullet(无源汇上下界最大流)
题目:Shoot the Bullet 收藏:http://www.tuicool.com/articles/QRr2Qb 把每一天看成一个点,每个女孩也看成一个点,增加源和汇s.t,源向每一天连上[ ...
- ZOJ - 3229 Shoot the Bullet (有源汇点上下界最大流)
题意:要在n天里给m个女生拍照,每个女生有拍照数量的下限Gi,每天有拍照数量的上限Di,每天当中每个人有拍照的上限Lij和Rij.求在满足限制的基础上,所有人最大能拍多少张照片. 分析:抛开限制,显然 ...
- zoj3229 Shoot the Bullet (有源汇最大流)
题目大意:文文要给幻想乡的女♂孩子们拍照,一共n天,m个女♂孩子,每天文文至多拍D[i]张照片,每个女♂孩子总共要被文文至少拍G[i]次.在第i天,文文可以拍c[i]个女♂孩子,c[i]个女♂孩子中每 ...
- 【有源汇上下界最大流】ZOJ 3229 Shoot the Bullet
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3229 题目大意: n天给m个女孩拍照(1<=n<= ...
- zoj 3229 Shoot the Bullet(有源汇上下界最大流)
Shoot the Bullethttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3442 Time Limit: 2 Second ...
- ZOJ 3229 Shoot the Bullet(有源汇的上下界最大流)
Description Gensokyo is a world which exists quietly beside ours, separated by a mystical border. It ...
随机推荐
- 【c学习-13】
/*库函数 1:数学函数库:math.h abs():绝对值; acos(),asin(),atan():cos,sin,tan的倒数 exp():指数的次幂 pow(x,y):x的y次幂 log() ...
- 方别《QQ群霸屏技术》,又见《QQ群建群细则》
规则,时刻变动;QQ群系列,咱们再来一轮. QQ群霸屏技术,你说建群貌似很菜,大家仿佛都知道,其实只知其一不知其二. QQ群类别 群分类,常规的就以下几种. 普通群. 建群随意,偏个性化,一言不合就拉 ...
- php开发aes加密总结
<?php class Aes { /** * aes 加密 解密类库 * @by singwa * Class Aes *说明:本类只适用于加密字符串 * */ private $key = ...
- Dynamics 365-下载新版本的开发工具
可以使用下面的Powershell脚本在NuGet下載最新的CRM开发工具.这些工具包括: Tool NuGet Package Code generation tool CrmSvcUtil.exe ...
- admin添加用户时报错:(1452, 'Cannot add or update a child row: a foreign key constraint fails (`mxonline`.`django_admin_l
在stackoverflow找到答案: DATABASES = { 'default': { ... 'OPTIONS': { "init_command": "SET ...
- 第三章 最简单的C程序设计——顺序程序设计
一.数据的表现形式及其运算 1.常量和变量 在计算机高级语言中,数据有两种表现形式:常量和变量. 1.1.常量 在程序运行过程中,其值不能被改变的量称为常量.如:5,6,32,0.111. 数值常量就 ...
- ubuntu配置机器学习环境(四) 安装intel MKL
在这一模块可以选择(ATLAS,MKL或者OpenBLAS),我这里使用MKL,首先下载并安装英特尔® 数学内核库 Linux* 版MKL,下载链接, 请下载Student版,先申请,然后会立马收到一 ...
- python pip ,安装,卸载,查看等命令,不同版本
pycharm及python的使用说明 Python和 pycharm的使用 1. pycharm和Python 下载 安装后需要激活码.判断Python是否安装好了,cmd下跑: python ...
- KMP算法(查找子序列)
KMP类似暴力,但是不会和暴力完全一样,回溯到起点. 简单的说 假如 模板链字符串是: abcabcabcabd 寻找abcabd 在模板链出现的次数,并且输出该次数 ...
- android去掉button默认的点击阴影
查了资料,发现别人都是说加一个style属性. style="?android:attr/borderlessButtonStyle" 加上了确实管用,但是我绝不是不求甚解的人.追 ...