省队集训 Day3 陈姚班
【题目大意】
给一张网格图,上往下有流量限制,下往上没有,左往右有流量限制。
$n * m \leq 2.5 * 10^6$
【题解】
考场直接上最大流,50分。竟然傻逼没看出狼抓兔子。
平面图转对偶图,其中没有流量限制(inf)不用转,然后直接在DAG上分层dp即可。
复杂度$O(nm)$,但是这样过不去被卡常了。
出题人的做法是先处理出每层初始的那个随机数,然后每层往下直接做,这样因为是一维数组,所以寻址方便,不会被卡常。
我的做法是动态开数组(用new),然后比较两维大小来分配第一维给谁,第一维优先分配给小的,第二维给大的。
然后如果n >= m可以用指针优化,所以阈值设为n * 10 >= m即可(虽然没啥必要)
# include <stdio.h>
# include <string.h>
# include <iostream>
# include <algorithm>
// # include <bits/stdc++.h> using namespace std; typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const int M = 2.5e5 + ;
const int mod = 1e9+; namespace irand {
int A, B, Q, X0;
inline void getseed() {
cin >> A >> B >> Q >> X0;
}
inline int getint() {
return X0 = (1ll * A * X0 + B) % Q;
}
} int n, m, **ad, **bd;
ll f[M]; int main() {
cin >> n >> m; irand :: getseed();
if(n * >= m) {
ad = new int*[m + ]; bd = new int*[m + ]; --n;
for (register int i=; i<=m; ++i) ad[i] = new int[n + ], bd[i] = new int[n + ];
for (register int i=; i<=n; ++i)
for (register int j=; j<=m; ++j)
ad[j][i] = irand :: getint(); for (register int i=; i<n; ++i)
for (register int j=; j<m; ++j)
bd[j][i] = irand :: getint(); for (register int i=; i<m; ++i) {
register int *A = ad[i], *B = bd[i];
for (register int j=; j<=n; ++j) f[j] += A[j];
for (register int j=; j<=n; ++j) f[j] = min(f[j], f[j-]+B[j-]);
for (register int j=n-; j; --j) f[j] = min(f[j], f[j+]+B[j]);
}
ll ans = 1e18;
for (int i=; i<=n; ++i) f[i] += ad[m][i];
for (int i=; i<=n; ++i) ans = min(ans, f[i]);
cout << ans << endl;
return ;
} else {
ad = new int*[n + ]; bd = new int*[n + ]; --n;
for (register int i=; i<=n; ++i) ad[i] = new int[m + ], bd[i] = new int[m + ];
for (register int i=; i<=n; ++i)
for (register int j=; j<=m; ++j)
ad[i][j] = irand :: getint(); for (register int i=; i<n; ++i)
for (register int j=; j<m; ++j)
bd[i][j] = irand :: getint(); for (register int i=; i<m; ++i) {
for (register int j=; j<=n; ++j) f[j] += ad[j][i];
for (register int j=; j<=n; ++j) f[j] = min(f[j], f[j-]+bd[j-][i]);
for (register int j=n-; j; --j) f[j] = min(f[j], f[j+]+bd[j][i]);
}
ll ans = 1e18;
for (int i=; i<=n; ++i) f[i] += ad[i][m];
for (int i=; i<=n; ++i) ans = min(ans, f[i]);
cout << ans << endl;
return ;
}
}
省队集训 Day3 陈姚班的更多相关文章
- 省队集训Day3 light
[问题描述] “若是万一琪露诺(俗称 rhl)进行攻击,什么都好,冷静地回答她的问题来吸引她.对方表现出兴趣的话,那就慢慢地反问.在她考虑答案的时候,趁机逃吧.就算是很简单的问题,她一定也答不上来.” ...
- 省队集训Day3 tree
[题目描述] RHL 有一天看到 lmc 在玩一个游戏. “愚蠢的人类哟,what are you doing”,RHL 说. “我在玩一个游戏.现在这里有一个有 n 个结点的有根树,其中有 m 个叶 ...
- bzoj4171 or 省队集训day3 chess: Rhl的游戏
[题目描述] RHL最近迷上一个小游戏:Flip it.游戏的规则很简单,在一个N*M的格子上,有一些格子是黑色,有一些是白色.每选择一个格子按一次,格子以及周围边相邻的格子都会翻转颜色(边相邻指至少 ...
- FJ省队集训DAY3 T2
思路:如果一个DAG要的路径上只要一条边去切掉,那么要怎么求?很容易就想到最小割,但是如果直接做最小割会走出重复的部分,那我们就这样:反向边设为inf,这样最小割的时候就不会割到了,判断无解我们直接用 ...
- FJ省队集训DAY3 T1
思路:我们考虑如果取掉一个部分,那么能影响到最优解的只有离它最近的那两个部分. 因此我们考虑堆维护最小的部分,离散化离散掉区间,然后用线段树维护区间有没有雪,最后用平衡树在线段的左右端点上面维护最小的 ...
- 【XSY2849】陈姚班 平面图网络流 最短路 DP
题目描述 有一个\(n\)行\(m\)列的网格图. \(S\)到第一行的每一个点都有一条单向边,容量为\(\infty\). 最后一行的每个点到\(T\)都有一条单向边,容量为\(\infty\). ...
- 省队集训 Day3 吴清华
[题目大意] 给网格图,共有$n * n$个关键节点,横向.纵向距离均为$d$,那么网格总长度和宽度均为$(n+1) * d + 1$,最外围一圈除了四角是终止节点.要求每个关键节点都要通过线连向终止 ...
- 省队集训 Day3 杨北大
[题目大意] 给出平面上$n$个点$(x_i, y_i)$,请选择一个不在这$n$个点之内的点$(X, Y)$,定义$(X, Y)$的价值为往上下左右四个方向射出去直线,经过$n$个点中的数量的最小值 ...
- 200万年薪请不到!清华姚班到底有多牛X?
前几天,清华大学自动化系2020年大一新生的C++作业因为太难而上了热搜,该话题在知乎上的热度一度高达 1300+ 万.  在该帖子下方,有很多关于这件事的讨论,其中很多不禁赞叹"清华太牛 ...
随机推荐
- DAY3敏捷冲刺
站立式会议 工作安排 (1)服务器配置 (2)数据库配置 燃尽图 燃尽图有误,已重新修改,先贴卡片的界面,后面补修改后燃尽图 代码提交记录
- sping框架(3)— 使用spring容器
spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口.它们都可以代表spring容器,sp ...
- 软工网络15团队作业4——Alpha阶段敏捷冲刺-2
一.当天站立式会议照片: 二.项目进展 昨天已完成的工作: 微信公众号平台注册"小程序"的账号; 下载微信官方的小程序开发工具,这个是编辑小程序和上传审核小程序必须的工具; 大家一 ...
- 【Linux】- Ubuntu安装redis,并开启远程访问
Ubuntu16.04安装Redis 开启Redis远程访问的步骤: 1.注释掉redis配置文件中的,bind 127.0.0.1 sudo vi /etc/redis/redis.conf #注释 ...
- AngularJS 学习笔记--01
学习 AngularJS 要先了解 MVC 模式 , 即 " 模型--视图--控制器 " . 模型: 包含了需要用到的数据 ; 有两种广义上的模型 : 视图模型 , 只表示从控制器 ...
- WPF比较两个随机数大小写,利用MVVM思想实现
MVVM模式是把表现层和业务层完全分离,所以这里就使用MVVM制作一个极其简单的WPF的例子: 先看看最终图:
- 反向传播算法 Backpropagation Algorithm
假设我们有一个固定样本集,它包含 个样例.我们可以用批量梯度下降法来求解神经网络.具体来讲,对于单个样例(x,y),其代价函数为:这是一个(二分之一的)方差代价函数.给定一个包含 个样例的数据集,我们 ...
- codeforces 985 E. Pencils and Boxes (dp 树状数组)
E. Pencils and Boxes time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- 只有父类的init方法才有创建servletConfig与servletContext的能力
如果重写了父类的init方法 但又没有显示调用父类的init方法 那么子类无法使用servletContext 因为 子类方法没有创建出 servletConfig
- 【bzoj1742】[Usaco2005 nov]Grazing on the Run 边跑边吃草 区间dp
题目描述 John养了一只叫Joseph的奶牛.一次她去放牛,来到一个非常长的一片地,上面有N块地方长了茂盛的草.我们可以认为草地是一个数轴上的一些点.Joseph看到这些草非常兴奋,它想把它们全部吃 ...