http://wikioi.com/problem/1034/

太神了这题。

其实一开始我以为是费用流,但是总感觉不对。

原因是我没看到一句话,特定的时刻到达特定的点!!

也就是说,并不是每艘船每次都从起点到终点,所以裸的费用流肯定不行。

翻了题解。。

好恐怖,,按时间拆点。

每一时刻的太空站我们都拆一个点,然后将上一时刻的太空站向这一时刻的太空站连一条容量为oo的边,表示在上一时刻太空站待着的人可以在这一时刻登船

然后每一时刻飞船都向对应时刻所到达的太空站连容量为飞船容量的边。

然后每一次都跑最大流,将人数k减去最大流,当k小于0的时候,答案就是这一时刻。(经测试,时刻设为100耗时20ms,时刻设为30也能ac耗时10ms)

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << #x << " = " << x << endl
#define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; }const int N=5010, M=2000000, oo=~0u>>1, s=5000, t=s+1;
int ihead[N], cnt=1, d[N], p[N], cur[N], gap[N], n, m, k, S[25], H[25], a[25][30];
struct ED { int from, to, cap, w, next; } e[M];
inline void add(const int &u, const int &v, const int &c) {e[++cnt].next=ihead[u]; ihead[u]=cnt; e[cnt].to=v; e[cnt].from=u; e[cnt].cap=c;e[++cnt].next=ihead[v]; ihead[v]=cnt; e[cnt].to=u; e[cnt].from=v; e[cnt].cap=0;
}
inline void update(const int &T) {for1(i, 0, n+1) add(i+(T-1)*22, i+T*22, oo);int u, v;for1(i, 1, m) {u=(T-1)*22+a[i][(T-1)%S[i]];v=T*22+a[i][T%S[i]];add(u, v, H[i]);}
}
int isap(const int &s, const int &t, const int &n) {for1(i, 0, t) cur[i]=ihead[i];CC(d, 0); CC(gap, 0);int ret=0, i, f, u=s;gap[0]=n;while(d[s]<n) {for(i=cur[u]; i; i=e[i].next) if(e[i].cap && d[u]==d[e[i].to]+1) break;if(i) {p[e[i].to]=cur[u]=i; u=e[i].to;if(u==t) {for(f=oo; u!=s; u=e[p[u]].from) f=min(f, e[p[u]].cap);for(u=t; u!=s; u=e[p[u]].from) e[p[u]].cap-=f, e[p[u]^1].cap+=f;ret+=f;}}else {if(! (--gap[d[u]]) ) break;d[u]=n; cur[u]=ihead[u];for(i=ihead[u]; i; i=e[i].next) if(e[i].cap && d[u]>d[e[i].to]+1) d[u]=d[e[i].to]+1;++gap[d[u]];if(u!=s) u=e[p[u]].from;}}return ret;
}
int main() {read(n); read(m); read(k);for1(i, 1, m) {read(H[i]); read(S[i]);rep(j, S[i]) {read(a[i][j]);if(a[i][j]==-1) a[i][j]=n+1;}}for1(i, 0, 100) add(s, i*22, oo), add((n+1)+i*22, t, oo);for1(i, 1, 100) {update(i);k-=isap(s, t, t);if(k<=0) { print(i); return 0; }}print(0);return 0;
}


题目描述 Description

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

输入描述 Input Description

文件第一行为三个正整数 n(太空站个数)、 m(太空船个数)、 k(需要运送的地球上的人的个数),其中 1<=m<=13, 1<=n<=20, 1<=k<=50。
接 下来的n行给出了太空船的信息,第i+1行说明太空船pi,此行第一个数表示pi可容纳的人数Hpi,第二个数表示pi停靠一个周期的太空站个数 r,1<=r<=n+2, 随后r个数便是停靠的太空站的编号(Si1,Si2,…,Sir), 地球用0表示,月球用-1表示。0时刻时,所有太空船都在初始站,随后开始运行,在时刻1,2,3…等正点时刻各艘太空船停靠相应的太空站,即人只有在 0,1,2…等正点时刻才能上下太空船。

输出描述 Output Description

文件只有一个数,若问题有解,输出完成全部人员安全转移的时刻,否则输出0。

样例输入 Sample Input

2 2 1

1 3 0 1 2

1 3 1 2 –1

样例输出 Sample Output

5

数据范围及提示 Data Size & Hint

1<=m<=13, 1<=n<=20, 1<=k<=50。

转载于:https://www.cnblogs.com/iwtwiioi/p/3941051.html

【wikioi】1034 家园(最大流+特殊的技巧)相关推荐

  1. QQ引流有什么技巧?QQ引流简单粗暴的4大技巧

    简单粗暴:QQ引流的四大技巧,做自媒体的都离不开这两个话题:"流量"和"变现",而有了前者才会有后者,所以如何引流就自然成了大家思索的问题,今天聪少就讲几个QQ ...

  2. 赶集网如何引流?同城本地引流方法和技巧

    现如今,大部分人都在做全网引流时,就有人瞄准了一些本地市场.业内有一句话说:一万的同城粉丝胜过十万的全网粉.没错,因为地区的限制,鱼塘是比较小,吸粉的难度也大.但是,正因为如此,加过来的粉丝基本也就是 ...

  3. 如何在今日头条号上做产品引流?今日头条引流实际操作技巧

    今日头条的流量很大,而且目前今日头条的入驻条件几乎是零门槛,如果你是一个个人自媒体,如果你是一个草根的话,今日头条确实是一个不能够忽视的平台. 入驻今日头条后,你通过写文章,发视频等形式曝光自己所编辑 ...

  4. 跨境运营培训引流转化的技巧分享

    对于跨境运营人员而言,引流和转化是日常工作的重点,想要做好亚马逊,流量是关键.接下来,华钜同创跨境运营培训班就给大家带来引流转化的技巧分享,帮助运营人员掌握更多的引流转化技巧,提升产品的流量及销量. ...

  5. 怎么在抖音引流带货?抖音引流带货技巧有哪些

    怎么在抖音引流带货?抖音引流带货技巧有哪些 很多刚开始接触抖音的朋友想要通过抖音带货引流,一时间不知道该如何操作,很多粉丝加了微信因为不懂又问不到主题,天天搞得像个客服一样,今天给大家总结一下抖音引流 ...

  6. wikioi 1034 家 实时动态的网络流量(费用流)

    因为随着时间的推移.网络侧变得,因此,常见的网络流量也解决不了这个问题,.如果T毕竟运输时间. 为此.我们可以基于时间分割点,所有的点将被分割为T点. 对于每一个点,下一次甚至一个容量为本人INF边缘 ...

  7. 新人做微商前期如何引流? 3个技巧你学会了,日进30+精准粉丝!

    怎么找到更多精准客户的3个技巧: 1.你要明白,你的客户在哪里? 如果你不了解你的客户在什么地方,那么你可以去一些目前比较火的平台去引流,那么目前比较火的平台有哪些呢?下面来举例说明一下: 视频类平台 ...

  8. 微信引流常用几大技巧

    目前做微商的小伙伴都知道:微信引流=流量的获取+人脉的扩张,这两项是在营销中非常重要的环节;说起来简单,但还是会有人困惑于微信引流方法,以及微信引流之后的变现问题 可以想象一下,做微信营销的本质是什么 ...

  9. 利用探探引流有哪些技巧?

    探探是在2014年6月上线的,上线不到2年,就已经成为中国90后喜欢的社交.交友平台,既然是90后喜欢的社交平台,那么肯定也会有一部分的营销推广人员存在的,那么就营销推广来说,利用探探引流有哪些不封号 ...

最新文章

  1. lambda表达式java_Lambda表达式Java教程
  2. Linux vim编写编译运行一个.c文件(centeos 8 HelloWorld.c)
  3. c++代码根据点位连线_邹军:数控车倒角C与自动倒圆角R编程方法
  4. SSH-key连接原理
  5. oracle字段去重查询,oracle怎么去重查询
  6. html 自定义文件选择,html5 自定义文件上传
  7. 8.Springcloud的Feign嵌入Ribbon实现接口式调用(改变restTemplate和Ribbon的调用方式)...
  8. netfilter和iptables的实现机制
  9. linux添加ipv6默认路由表,IPv6及静态路由配置
  10. 打印机出现另存为xps_打印机打印文件显示另存为xps格式的文件 - 卡饭网
  11. 冰点还原精灵如何安装
  12. LeetCode-Python-1386. 安排电影院座位(数组)
  13. EPLAN 电气工程图纸
  14. 软件工程测试题(雨课堂学堂在线选择题汇总)
  15. 操作系统简介及编程语言
  16. HTTPSConnectionPool(host=‘music.163.com‘, port=443): Max retries exceeded with url: /weapi/comment/
  17. Android推送的群魔乱舞
  18. 鸿蒙开发|呼吸训练实战项目(二)
  19. 商品绑定可用的优惠券(多对多的绑定且一张优惠券只能使用于一个商品)
  20. Tomorrow never knows?(C程序设计进阶第2周)

热门文章

  1. strok、strtok_r和strtok_s
  2. 看10篇博文写点感受,不积跬步,无以至千里、不积细流,无以成江海
  3. 基于SnowNLP的商品评论文本情感分析
  4. 2019苹果开发者大会八大看点
  5. Fine Bi数据可视化day01:连接到数据
  6. 机械键盘知识漫谈(三)- 轴体篇
  7. repaint()函数
  8. 一次挖矿入侵处理记录(2021.01.27)
  9. Pinterest今年营收有望达6亿美元 考虑IPO
  10. 《蒹葭》-- 选自《诗经·国风·秦风》