【题目大意】

给一张网格图,上往下有流量限制,下往上没有,左往右有流量限制。

$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 陈姚班的更多相关文章

  1. 省队集训Day3 light

    [问题描述] “若是万一琪露诺(俗称 rhl)进行攻击,什么都好,冷静地回答她的问题来吸引她.对方表现出兴趣的话,那就慢慢地反问.在她考虑答案的时候,趁机逃吧.就算是很简单的问题,她一定也答不上来.” ...

  2. 省队集训Day3 tree

    [题目描述] RHL 有一天看到 lmc 在玩一个游戏. “愚蠢的人类哟,what are you doing”,RHL 说. “我在玩一个游戏.现在这里有一个有 n 个结点的有根树,其中有 m 个叶 ...

  3. bzoj4171 or 省队集训day3 chess: Rhl的游戏

    [题目描述] RHL最近迷上一个小游戏:Flip it.游戏的规则很简单,在一个N*M的格子上,有一些格子是黑色,有一些是白色.每选择一个格子按一次,格子以及周围边相邻的格子都会翻转颜色(边相邻指至少 ...

  4. FJ省队集训DAY3 T2

    思路:如果一个DAG要的路径上只要一条边去切掉,那么要怎么求?很容易就想到最小割,但是如果直接做最小割会走出重复的部分,那我们就这样:反向边设为inf,这样最小割的时候就不会割到了,判断无解我们直接用 ...

  5. FJ省队集训DAY3 T1

    思路:我们考虑如果取掉一个部分,那么能影响到最优解的只有离它最近的那两个部分. 因此我们考虑堆维护最小的部分,离散化离散掉区间,然后用线段树维护区间有没有雪,最后用平衡树在线段的左右端点上面维护最小的 ...

  6. 【XSY2849】陈姚班 平面图网络流 最短路 DP

    题目描述 有一个\(n\)行\(m\)列的网格图. \(S\)到第一行的每一个点都有一条单向边,容量为\(\infty\). 最后一行的每个点到\(T\)都有一条单向边,容量为\(\infty\). ...

  7. 省队集训 Day3 吴清华

    [题目大意] 给网格图,共有$n * n$个关键节点,横向.纵向距离均为$d$,那么网格总长度和宽度均为$(n+1) * d + 1$,最外围一圈除了四角是终止节点.要求每个关键节点都要通过线连向终止 ...

  8. 省队集训 Day3 杨北大

    [题目大意] 给出平面上$n$个点$(x_i, y_i)$,请选择一个不在这$n$个点之内的点$(X, Y)$,定义$(X, Y)$的价值为往上下左右四个方向射出去直线,经过$n$个点中的数量的最小值 ...

  9. 200万年薪请不到!清华姚班到底有多牛X?

    前几天,清华大学自动化系2020年大一新生的C++作业因为太难而上了热搜,该话题在知乎上的热度一度高达 1300+ 万.  在该帖子下方,有很多关于这件事的讨论,其中很多不禁赞叹"清华太牛 ...

随机推荐

  1. Uva 1600 Patrol Robot (BFS 最短路)

    这道题运用的知识点是求最短路的算法.一种方法是利用BFS来求最短路. 需要注意的是,我们要用一个三维数组来表示此状态是否访问过,而不是三维数组.因为相同的坐标可以通过不同的穿墙方式到达. #inclu ...

  2. Java 继承和访问控制

    类的继承 Java中使用extends来实现继承 通过继承,子类自动拥有了基类(supercalss)的所有成员. Java只支持单继承,一个子类只允许有一个基类,一个基类可以有多个子类. class ...

  3. object-oriented 第二次作业(2)

    面向对象程序设计自学计划 由于我的英文实在是很差,所以我就没有去考虑看英文的课程视频.网络上的课程有很多,什么学校的也有,一开始我不知道该如何开始选择课程.感觉每个都还可以.后来在群里的看到别人推荐的 ...

  4. UVALive - 6886 Golf Bot 多项式乘法(FFT)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/129724 Golf Bot Time Limit: 15000MS 题意 给你n个数,m个查询,对于每个查询 ...

  5. 什么是POJO模式

    1.     什么是POJO POJO的名称有多种,pure old java object .plain ordinary java object 等. 按照Martin Fowler的解释是“Pl ...

  6. Java容器之Iterator接口

    Iterator 接口: 1. 所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象. 2. Iterator 对象称作迭代器,用以方便的 ...

  7. 【MVC4升级到MVC5】ASP.Net MVC 4项目升级MVC 5的方法

    1.备份你的项目 2.从Web API升级到Web API 2,修改global.asax,将 ? 1 WebApiConfig.Register(GlobalConfiguration.Config ...

  8. html中图片自适应浏览器和屏幕,宽度高度自适应

    1.(宽度自适应):在网页代码的头部,加入一行viewport元标签. <meta name="viewport" content="width=device-wi ...

  9. SVM之问题形式化

    >>>SVM之问题形式化 SVM之对偶问题 SVM之核函数 SVM之解决线性不可分 写在SVM之前——凸优化与对偶问题 SVM内容繁多,打算用五篇文章来记述.SVM之问题形式化描述给 ...

  10. windows默认TEMP环境

    留着是为了等出问题的时候能找着改回来 Administrator 的用户变量 TEMP     %USERPROFILE%\AppData\Local\Temp TMP        %USERPRO ...