传送门 这题思路太强了……大佬们怎么想到的……我这菜鸡根本想不出来…… 先判断是否能到达,对每一艘飞船能到的地方用并查集合并一下,最后判断一下是否连通 然后考虑几天怎么判断,我们可以枚举. 每一个点表示“第几个空间站在第几天”这个状态,那么枚举的答案每加一,就要新建所有空间站的点 源点向每一个地球连一条容量$inf$的边,每个空间站向下一秒的空间站连容量$inf$的边,表示可以转移到下一秒 然后飞船在哪一个星球可以判断,那么从这一个时间的出发点向下一个时间的到达点连边,容量为飞船载人数 只要网络…
题目链接:https://www.luogu.org/problemnew/show/P2754 知识点: 最大流 解题思路: 先用 \(DFS\) 判断是否无解. 从时刻 \(0\) 开始枚举答案,从飞船此刻的位置往下一时刻的位置连边,容量为飞船的载客量,然后在上一刻的残量网络的基础上跑 \(sap\),将最大流累加起来,当最大流的累加和大于或等于 \(k\) 时,便可得出答案. 对于同一个位置的不同时刻,要用不同的点代表,并且把他们按照时间的先后顺序连起来,容量为 \(INF\):对于代表地…
题目链接:[CTSC1999]家园 这个题目我们不是很好在做网络流的时候判断是否有解,因此我们考虑分开来做 对于是否有解的判断,我们唯一需要解决的是飞船的周期停泊问题,对于这个问题,我们可以用并查集解决 我们记源点\(s\)是地球,汇点\(t\)是月球,将一艘飞船上一秒在的星球和下一秒在的星球并入一个集合中,最后判断\(s\)和\(t\)是否在同一个集合中即可 对于第二问,我们可以建立分层图.即对于每一秒的飞船情况建立新边,具体的,我们从上一秒飞船所在的地方向下一秒它将去往的地方连边.这样做也是…
洛谷 P2754 题目背景 none! 题目描述 由于人类对自然资源的消耗,人们意识到大约在 2300 年之后,地球就不能再居住了.于是在月球上建立了新的绿地,以便在需要时移民.令人意想不到的是,2177 年冬由于未知的原因,地球环境发生了连锁崩溃,人类必须在最短的时间内迁往月球.现有 n 个太空站位于地球与月球之间,且有 m 艘公共交通太空船在其间来回穿梭.每个太空站可容纳无限多的人,而每艘太空船 i 只可容纳 H[i]个人.每艘太空船将周期性地停靠一系列的太空站,例如:(1,3,4)表示该太…
题目链接 嗯..水题 洛谷这网络流二十四题的难度评价真神奇.. #include <queue> #include <cstdio> #include <cctype> #include <cstring> #include <algorithm> #define gc() getchar() const int N=206,M=15000,INF=0x3f3f3f3f; int n,m,src,des,A[N],B[N],C[N][N],dis…
题目链接 突然发现Dinic很好写诶.. 第一次数组开小了,玄学\(WA\),what?数据范围描述有误? 分层图,每天为一层. 把上一天的每个空间站向这一天连一条流量为inf的边,表示可以原地不动. 把一个周期内上一天上一个和这一天这一个连一条流量为这艘太空船的容量的边,表示去下一站. 然后每次加一天,看什么时候最大流达到\(k\)就行了. #include <cstdio> #include <queue> using namespace std; #define INF 21…
判无解的方法非常粗暴:快T了还是没有合法方案,就是无解. 然后枚举答案,对于每一天都建一套太空站,s连地球,t连月球,上一天的太空站连向这一天的太空站,流量均为inf.然后对于每个飞船,上一天的停靠站向这一天的停靠站连边,流量为p.每次新增一天都新建一套,然后跑一次dinic加给tot,等tot>=k,当前枚举的天数就是答案. #include<iostream> #include<cstdio> #include<cstring> #include<que…
费用流板子 还是一道板子题..先练练手 #include <bits/stdc++.h> #define INF 0x3f3f3f3f #define full(a, b) memset(a, b, sizeof a) using namespace std; typedef long long ll; inline int lowbit(int x){ return x & (-x); } inline int read(){ int X = 0, w = 0; char ch =…
传送门 源点向仓库连费用$0$,流量为储量的边,商店向汇点连费用$0$,流量为需求的边,然后仓库向商店连流量$inf$,费用对应的边,跑个费用流即可 //minamoto #include<iostream> #include<cstdio> #include<queue> #include<cstring> #define inf 0x3f3f3f3f using namespace std; #define getc() (p1==p2&&…
传送门 可以把原图看做一个二分图,人在左边,任务在右边,求一个带权的最大和最小完美匹配 然而我并不会二分图做法,所以只好直接用费用流套进去,求一个最小费用最大流和最大费用最大流即可 //minamoto #include<iostream> #include<cstdio> #include<queue> #include<cstring> #define inf 0x3f3f3f3f using namespace std; #define getc()…