洛谷P2754:[CTSC1999]家园 / 星际转移问题(网络流)
解析
容易想到对每个时间的空间站都建一个点。
然后发现循环问题很难搞。
然后我就一直想从 lcm 下文章,结果 lcm 可以到3e5,于是就寄了…
qwq
注意到本题的数据范围极小!
那个3e5云云是不可能跑出来的,事实上,答案不可能超过 n k nk nk。(最差也就是每次都只有一个人乘一班环游世界车摆烂)
所以,我们可以更加暴力的做。
枚举当前时间。
然后就好办了,每次把当前时间下的空间站和星球建出来,暴力连边即可。
设答案为 w w w,那么点数为 O ( w n ) O(wn) O(wn),边数为 O ( w m ) O(wm) O(wm)。
跑的飞快。
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
const int N=2e5+100;
const int M=1e6+100;
const int inf=1e9;int n,m;int s,t,tot;
struct node{int to,nxt,cap;
}p[N<<1];
int fi[N],cur[N],cnt;
inline void addline(int x,int y,int c){p[++cnt]=(node){y,fi[x],c};fi[x]=cnt;
}
inline void add(int x,int y,int c){addline(x,y,c);addline(y,x,0);return;
}
int bel[N],q[N],st,ed;
int bfs(){fill(bel,bel+1+tot,0);q[st=ed=1]=s;bel[s]=1;while(st<=ed){int now=q[st++];for(int i=cur[now]=fi[now];~i;i=p[i].nxt){ int to=p[i].to;if(!p[i].cap||bel[to]) continue;bel[to]=bel[now]+1;q[++ed]=to;}}return bel[t];
}
int dfs(int x,int lim){if(x==t||lim==0) return lim;int res(0);for(int &i=cur[x];~i;i=p[i].nxt){int to=p[i].to;if(bel[to]!=bel[x]+1) continue;int add=dfs(to,min(lim,p[i].cap));res+=add;lim-=add;p[i].cap-=add;p[i^1].cap+=add;if(!lim) break;}if(!res) bel[x]=-1;return res;
}
ll flow;
void dinic(){ll tmp=0;while(bfs()){while((tmp=dfs(s,2e9))) flow+=tmp;}return;
}int id[16][1050],k;
int num[25],x[25][16],h[25];
void build(int tim){for(int i=1;i<=n;i++){id[i][tim]=++tot;if(tim) add(id[i][tim-1],id[i][tim],inf);}add(s,id[2][tim],inf);add(id[1][tim],t,inf);if(tim){for(int i=1;i<=m;i++){int pl=(tim-1)%num[i]+1;//printf("add: (%d %d)->(%d %d) cap=%d\n",//x[i][pl],tim-1,x[i][pl%num[i]+1],tim,h[i]);add(id[x[i][pl]][tim-1],id[x[i][pl%num[i]+1]][tim],h[i]);}}return;
}
signed main(){#ifndef ONLINE_JUDGE//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);#endifmemset(fi,-1,sizeof(fi));cnt=-1;n=read()+2;m=read();k=read();s=++tot;t=++tot;for(int i=1;i<=m;i++){h[i]=read();num[i]=read();for(int j=1;j<=num[i];j++) x[i][j]=read()+2;}build(0);for(int tim=1;tim<1000;tim++){build(tim);dinic();if(flow>=k){printf("%d\n",tim);return 0;}}//printf("%d\n",flow);printf("0");return 0;
}
/*
0 1 1
1 2 0 -1
*/
洛谷P2754:[CTSC1999]家园 / 星际转移问题(网络流)相关推荐
- P2754 [CTSC1999]家园 / 星际转移问题(网络流)
P2754 [CTSC1999]家园 / 星际转移问题 经典问题,利用分层图来跑网络流.
- 洛谷 - P2754 [CTSC1999]家园(最大流+并查集)
题目链接:点击查看 题目大意:现在有k个人类需要从地球上转移到月球上去,现在有n个宇宙中转站,以及m个飞船周期性运载,每个飞船的载客都有一定的上限,但中转站的载客没有上限,现在给出每个飞船的路线,问最 ...
- 家园 / 星际转移问题(洛谷P2754 分层图+最大流)
再一次感觉网络流太神奇了qwq 题目链接:[星际转移问题](P4009 汽车加油行驶问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)) 受到之前那道[汽车加油行驶问题](P400 ...
- P2754 [CTSC1999]家园
\(\color{#0066ff}{题目描述}\) 由于人类对自然资源的消耗,人们意识到大约在 2300 年之后,地球就不能再居住了.于是在月球上建立了新的绿地,以便在需要时移民.令人意想不到的是,2 ...
- P2754 [CTSC1999] 家园
来一篇 \(Pascal\). 很显然分层之后就可以搞最大流了. 如果蒟蒻没有想错的话是这样子的 : 之前把 \(matrix[i,-1]\) 搞错了改了 \(1 h\).把 \(ISAP\) 换成 ...
- YBTOJ危桥通行洛谷P3163:危桥通行(网络流)
文章目录 题目描述 解析 代码 题目描述 Alice 和 Bob 居住在一个由 NN 座岛屿组成的国家,岛屿被编号为 00 到 N-1N−1.某些岛屿之间有桥相连,桥上的道路是双向的,但一次只能供一人 ...
- 【洛谷 - P1231 】教辅的组成(网络流最大流,拆点)
题干: 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题.然而出现在他眼前的书多得数不胜数,其中有书,有答案,有练习册.已知一个完整的书册均应该包含 ...
- 【洛谷P3376】网络最大流【网络流】
分析 网络流算法本身是之前学过的,今天拿出来复习打个板子. 最原始的思路应该是搜索每一条路,每次进行增广的操作,知道不能增广为止.显然,这种思路复杂度比较高. 如何进行优化?就是dinic算法.上面那 ...
- 洛谷——网络流24题
P2756 飞行员配对方案问题 P2762 太空飞行计划问题 P4014 分配问题 P2774 方格取数问题 P4009 汽车加油行驶问题 P4015 运输问题 P3254 圆桌问题 P2763 试题 ...
最新文章
- Ubuntu 14.04 64bit上安装LNMP环境
- bootstrapTable语言包设置
- angular面试题及答案_关于最流行的Angular问题的StackOverflow上的48个答案
- 大家觉得创业需要些什么
- 快捷配置mysql_windows下的mysql的快捷安装方法和简单配置
- SAP License:SAP创建中国版免费在线公开课程openSAP
- 汽车发动机电子控制技术
- AudioTunes FLAC, APE, WMA Converter for Mac(音频转换工具)
- 问题解决丨对不起,小米路由器出现网络连接问题无法打开网页
- 已解决 There are unfinished transactions remaining. You might consider running yum-complete-transaction
- 洛谷-2028 龙兄摘苹果
- 加油站微信小程序的设计与实现-计算机毕业设计
- Django之Form表单验证组件Tyrion
- Jenkins+Newman+Postman生成接口自动化测试报告
- photoshop导出png发生未知错误的解决方案,ps导出发生未知错误怎么解决
- idea运行报路径不存在
- Qt中的unicode转换
- 记录SEO寄生虫处理过程
- 【工业互联网】周剑:工业互联网平台作用机理和发展路径
- 西门子plm_一个月内接连收购两家企业,西门子不断加码工业软件,巨头的数字化决心...
热门文章
- [LinkerScript.18] SECTION命令: Input Section Description : 输入section的基础
- [排序不等式] 排队打水(排序不等式+贪心)
- asterisk:No compatible codecs, not accepting this offer!
- 动态窗口算法(DWA)
- GO语言下载、安装、配置
- python实现给定电影英文名,在猫眼上爬到中文名和票房
- 力扣589.N叉树的前序遍历
- tf.nn.sampled_softmax_loss用法详解
- Linux中的几种定时器
- Android之 双屏异显控制