【codevs1034】 家园

http://codevs.cn/problem/1034/ (题目链接)

题意

  给出一张n个点的图,有m架飞船按照固定的航班运行,没单位时间移动一次,并且没收航班都有自己的容纳量。问从0号点将K个人运输到-1号点需要多长时间。

Solution

  看到这个题目后非常纠结,如果把时间因素去掉,那么就是一个典型的网络流,那么我们能不能将将时间与建图结合在一起呢?

  答案是可以的。我们可以枚举当前的时间,并构建按时间分层的图,新建源点S连向0时刻的0号点,汇点连向每个时刻的-1号点,只要还有人没有到达-1汇点,那么就继续增加时间。

细节

  mdzz样例有毒啊!负号竟然是全角的,我还调了1个多小时。。

  注意判断无解的情况。

代码

// codevs1034
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std;

const int maxn=100010;
struct edge {int to,next,w;}e[maxn<<1];
int f[100][100],h[100],r[100],es,et,n,m,K,T,cnt=1,ans;
int head[maxn],d[maxn];

void link(int u,int v,int w) {
	e[++cnt]=(edge){v,head[u],w};head[u]=cnt;
	e[++cnt]=(edge){u,head[v],0};head[v]=cnt;
}
void build() {
	for (int i=1;i<=m;i++) link(n*(T-1)+f[i][(T-1)%r[i]],n*T+f[i][T%r[i]],h[i]);
	for (int i=1;i<=n;i++) link(n*(T-1)+i,n*T+i,inf);
	link(n*T+n,et,inf);
}
bool bfs() {
	memset(d,-1,sizeof(d));
	queue<int> q;q.push(1);d[1]=0;
	while (!q.empty()) {
		int x=q.front();q.pop();
		for (int i=head[x];i;i=e[i].next) if (e[i].w && d[e[i].to]<0) {
				d[e[i].to]=d[x]+1;
				q.push(e[i].to);
			}
	}
	return d[et]>0;
}
int dfs(int x,int f) {
	if (x==et || f==0) return f;
	int w,used=0;
	for (int i=head[x];i;i=e[i].next) if (e[i].w && d[e[i].to]==d[x]+1) {
			w=dfs(e[i].to,min(e[i].w,f-used));
			used+=w;
			e[i].w-=w;e[i^1].w+=w;
			if (used==f) return used;
		}
	if (!used) d[x]=-1;
	return used;
}
void Dinic() {
	while (bfs()) K-=dfs(es,inf);
}
int main() {
	scanf("%d%d%d",&n,&m,&K);
	es=1;et=100000;
	for (int i=1;i<=m;i++) {
		scanf("%d%d",&h[i],&r[i]);
		for (int j=0;j<r[i];j++) {
			scanf("%d",&f[i][j]);
			if (++f[i][j]==0) f[i][j]=n+2;
		}
	}
	n+=2;T=0;
	link(n,et,inf);
	while (++T) {
		build();
		Dinic();
		if (K<=0) break;
		if (T>1000) {printf("0");return 0;}
	}
	printf("%d",T);
	return 0;
}

  

时间: 2024-10-10 07:10:10

【codevs1034】 家园的相关文章

【Codevs1034】家园(最大流,裂点)

题意:由于人类对自然的疯狂破坏,人们意识到在大约2300年之后,地球不能再居住了,于是在月球上建立了新的绿地,以便在需要时移民.令人意想不到的是,2177年冬由于未知的原因,地球环境发生了连锁崩溃,人类必须在最短的时间内迁往月球.现有n个太空站处于地球与月球之间(编号1..n),m艘公共交通太空船在其中来回穿梭,每个太空站Si可容纳无限的人,每艘太空船pi只可容纳Hpi人.对于每一艘太空船pi,将周期性地停靠一系列的太空站(Si1,Si2-Sir),如:(1,3,4)表示停靠太空站1 3 4 1

【codevs1034】家园——网络流

由数据范围看是可以用网络流的... 其实还是接近于很裸的网络流,不过是变成了动态建边,图会很大,不过题目数据范围小啊... 枚举时间,自己想一个上界,cyc大佬说是100,那就100吧,到达上界前找到就输出当前时间并退出,超出上界就输出0. cyc大佬反复强调tot=1而不是2!!! 然后就跑啊跑,记得加当前弧优化! #include<cstdio> #include<iostream> #include<cstring> using namespace std; co

Discuz! X3.2 数据字典-home家园表

pre_home_album 家园相册表 字段名 数据类型 默认值 允许非空 自动递增 备注 albumid mediumint(8) unsigned NO 是 相册ID albumname varchar(50) NO 相册名字 catid smallint(6) unsigned 0 NO 相册系统分类 uid mediumint(8) unsigned 0 NO 相册用户ID username varchar(15) NO 相册用户名 dateline int(10) unsigned

通用Windows应用《博客园-开发者的网上家园》开发(1)——MVVM模式

最近开发了个WP8.1和Windows8.1平台上的应用——<博客园-开发者的网上家园>,基于 Windows Runtime .在此有必要说明一下,WP8.0以前的应用程序是基于Silverlight的,微软为了统一Windows Phone OS 和 Windows RT,从开发人员的角度上,也统一了两个平台上大部分的API,使得开发人员可以共享代码(而不是一次编写,跨平台运行). 本文着重描述MVVM在Windows Runtime应用程序下的表现,关于MVVM模式的理解,可参考园子里 

萝卜家园Win10纯净版系统开始菜单反应慢四个解决方法

萝卜家园Win10纯净版系统的开始菜单跟以往的win7系统是不一样的,win10系统的开始菜单非常的有特色,提升了用户的视觉美感,但是过了一段时间,不知道为什么,发现打开菜单的速度就越来越慢了,这是怎么回事?小编列举了四个解决办法,快来看看吧! 萝卜家园Win10系统反应慢的方法一:删除多余的动态磁贴 1.点击开始按钮,打开开始菜单; 2.选择不常用的动态磁贴,右键选择"从开始屏幕取消固定".如图1所示 萝卜家园Win10系统反应慢的方法二:关闭小娜助手在线搜索 1.点击任务栏小娜(C

win10右键没有新建|萝卜家园Win10系统右键菜单没有新建怎么修复

在萝卜家园win10纯净版系统桌面上,用户新建一个文本文档,但是发现右键中竟然没有"新建"选项,这是怎么回事?来看看小编是怎么修复萝卜家园win10系统右键没有新建选项的? 鼠标右击桌面没有新建选项,效果图如下图所示 萝卜家园win10系统右键没有新建选项的修复步骤: 1.在键盘上"win+R",调出"运行"界面,输入"regedit",点击确定或者回车,打开注册表编辑器;如图1所示 2.打开的注册表编辑器窗口,展开HKEY_

08cms家园系统源码注入漏洞 -中国寒龙出品

# Title :08cms家园系统注入漏洞# Team :08 Security Team# Author :08安全团队# 首发 : 08安全团队#######################################这个漏洞在5月份已经审计出来了,现在将漏洞放出来.注册一个账号 会员资料->基本资料 查看表单得到自己的 MID在真实姓名 填写 \头像填写 1 ,company=(SELECT CONCAT(mname,0x7c,PASSWORD) FROM cms_members l

关于我的网站(八零家园三周年)

三年转瞬即逝,2011年8月6日注册了www80.org这个域名,并给这个网站起名叫“八零家园”,当时计划的是在做成一个怀念八零后的旧时光的网站,还有第二步计划是如果做大了还要开通八零后交流的论坛——“八零家园”.但是,事实上,这三年,这个网站并没有做成,原因有很多,总之是失败了.2011年的8月6日,我还没有到山东大学读研,2014年的8月6日,我已经从山东大学毕业,来到了浪潮集团工作.以后,要工作,还要不断学习,还有很多目标要去实现,所以这个网站估计也就荒废了,但是我会一直留着的.与网站还有

【公测】智能&便捷&稳定 新版家园只为给你不一样的体验~

         历时四个多月,在技术GG&MM们的辛苦劳作中,新版家园终于开发完成啦~         全新的架构,扁平化的设计,简洁明了的界面,更便捷的操作,只为给你不一样的体验~        新版家园体验教程>>>         现新版家园公测版上线啦,特别征集用户参与体验,希望能给出一些中肯的意见哦~        我不会偷偷告诉您们,提出的意见被采纳的用户会有礼品哦~ 欢迎大家积极参与哦~新版家园抢先看>>         公测的时间: