牛客多校三 B Black and white
牛客多校三 B Black and white
在n*m的棋盘上,每个格子有一个数,初始可以选一定的格子标记为黑色,在任意四个形如(i1, j1)(i1, j2)(i2, j1)(i2, j2)的格子当中,如果有三个格子已经是黑色的了,那么剩下的一个可以自动染黑。问选哪些格子初始标记为黑色,可以使最终整个棋盘变为黑色的同时,选择的格子数字之和最小。
数据范围n, m <= 5000, a, b, c, d, p用于格子中的数字生成。
也是一个思维题,转化成一个最小生成树。
在拿到题时候可以发现,至少要选择一行和一列,可以让整个棋盘都变为黑色。不过不一定是要一整行或者一整列,有时候对角线也是可以的,但是可以确定最少选择n + m - 1个数可以将整个棋盘染黑。
看到这个数字可以想到,如果有n + m个点,那么生成树就是n + m - 1条边。所以抽象出一个二分图,一边为A节点,有n个;另一边为B节点,有m个。当(i, j)格子被染黑,这就代表着Ai和Bj在一个连通块中。
而对于2 * 2格子当中的黑色块的传递,可以这样理解:假如(1,1)(1,2)(2,1)都已经染黑的,这就代表着,A1与B1有一条连边,A1与B2有一条连边,A2与B1有一条连边,那么A2与B2就已经在一个连通块当中了,所以就染黑了。
当所有的块都染黑,表示都在一个连通块里,同时要求初始染黑之和最小,这就是最小生成树。注意数据范围,用prim求。
const long long inf = 1e18 + 10;
const int N = 5010;
long long dis[N][N], mn[N << 1];
bool vis[N << 1];int main()
{//freopen("in.txt", "r", stdin);int T = 1;//T = read();while (T --){int n, m, a, b, c, d, p;n = read(); m = read();a = read(); b = read(); c = read(); d = read();p = read();long long pre = a;for (int i = 1; i <= n + m; i ++)mn[i] = inf;for (int i = 1; i <= n; i ++)for (int j = 1; j <= m; j ++){dis[i][j] = (pre * pre * b + pre * c + d) % p;pre = dis[i][j];}int now = 1;long long ans = 0;for (int i = 1; i < n + m; i ++){vis[now] = 1;if (now <= n){for (int j = n + 1; j <= n + m; j ++)if (mn[j] > dis[now][j - n])mn[j] = dis[now][j - n];}else{for (int j = 1; j <= n; j ++)if (mn[j] > dis[j][now - n])mn[j] = dis[j][now - n];}long long mnn = inf, p = -1;for (int j = 1; j <= n + m; j ++)if (!vis[j] && mn[j] < mnn){mnn = mn[j];p = j;}ans += mnn;now = p;}cout << ans;}return 0;
}
牛客多校三 B Black and white相关推荐
- 24dian(牛客多校第三场)
24dian(牛客多校第三场) 题意: 给你n张牌,每张牌的大小为1 ~ 13,问这些牌与加减乘除任意组合(可以使用括号),且但所有的有效解在计算过程中都涉及到分数,即非整数,能否组成答案m,如果可以 ...
- 牛客多校第三场 B【Classical String Problem】
牛客多校第三场 B[Classical String Problem] 链接:https://ac.nowcoder.com/acm/contest/5668/B 来源:牛客网 题目描述 Given ...
- LCS(2021牛客多校4)
LCS(2021牛客多校4) 题意: 让你构造三个字符串s1,s2,s3,长度均为n,要求LCS(s1,s2)=a,LCS(s2,s3)=b,LCS(s1,s3)=c 题解: 先考虑三个串互相LCS为 ...
- 2022牛客多校(十)
2022牛客多校(十) 一.比赛小结 比赛链接:"蔚来杯"2022牛客暑期多校训练营10 二.题目分析及解法(基础题) F.Shannon Switching Game? 题目链接 ...
- 2019牛客多校训练第十场F Popping Balloons
2019牛客多校训练第十场F Popping Balloons 题意:二维平面内给你若干个点,然后你可以在x轴和y轴分别射三枪(每一枪的间隔是R),问最多能射掉多少气球. 题解:贪心.这个应该只能算作 ...
- 牛客多校第十场F-Popping Balloons
题目连接 牛客多校F-PoppingBalloons 题意: 用枪打气球,可以横着打三次,竖着打三次,横着打可以把那一行的气球全打下来,竖着打可以把那一列的气球全打下来,但是,每两次相邻的横着打或者竖 ...
- python字符串去重及排序 牛客_2018牛客多校第一场 D.Two Graphs
题意: n个点,m1条边的图E1,n个点,m2条边的图E2.求图E2有多少子图跟图E1同构. 题解: 用STL的全排列函数next_permutation()枚举映射.对于每一种映射枚举每一条边判断合 ...
- 2020 牛客多校第一场
2020 牛客多校第一场 A. B-Suffix Array 后缀数组的思想:倍增+桶排序的方式找出一串连续序列后缀的大小.虽说正常使用的时候都是字典序,但是只要修改排序方式,也能够达到一个类似的&q ...
- 2019牛客多校第一场
2019牛客多校第一场 题号 题目 知识点 A Monotonic Matrix B Symmetric Matrix C Fluorescent 2 D Two Graphs E Removal F ...
最新文章
- 问题 “cell 出栈 selectBox 已选的图标,被释放掉,再次进入屏幕时,没有了已选图标 ” 解决方案...
- 文本分类从入门到精通
- linux lib64被改名,问题解决:Centos误将/lib64更改为lib64.bak
- jmeter测试java_使用JMeter测试Java项目
- HDU - 6203 ping ping ping(LCA+dfs序+线段树)
- Windbg在Managed App中设置函数断点的几种方法
- mfc 弹簧_弹簧和线程:事务
- python读取单元格部分内容_Python提取表格一定区域的内容
- c语言解数独算法递归,How to think:递归和数独试探算法
- Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十五)
- 4.4系统,拍照-裁剪,resultCode返回0
- Java 队列 Queue 使用说明
- PHP PDO的简单使用(query(),exec(),prepare(),Transaction,行锁)
- 用C 程序理解汉字的机内码表示
- android gms包
- VS+Qt应用开发-设置软件图标
- cdn搭建原理_CDN运行过程四大要点,附技术原理图解,智能DNS解析
- Linux——系统磁盘管理与文件系统
- Windows xp .iso下载大全——超全面超难找的收藏版(一)
- 奇怪的报错(uncaught typeerror illegal invocation)