牛客多校三 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相关推荐

  1. 24dian(牛客多校第三场)

    24dian(牛客多校第三场) 题意: 给你n张牌,每张牌的大小为1 ~ 13,问这些牌与加减乘除任意组合(可以使用括号),且但所有的有效解在计算过程中都涉及到分数,即非整数,能否组成答案m,如果可以 ...

  2. 牛客多校第三场 B【Classical String Problem】

    牛客多校第三场 B[Classical String Problem] 链接:https://ac.nowcoder.com/acm/contest/5668/B 来源:牛客网 题目描述 Given ...

  3. LCS(2021牛客多校4)

    LCS(2021牛客多校4) 题意: 让你构造三个字符串s1,s2,s3,长度均为n,要求LCS(s1,s2)=a,LCS(s2,s3)=b,LCS(s1,s3)=c 题解: 先考虑三个串互相LCS为 ...

  4. 2022牛客多校(十)

    2022牛客多校(十) 一.比赛小结 比赛链接:"蔚来杯"2022牛客暑期多校训练营10 二.题目分析及解法(基础题) F.Shannon Switching Game? 题目链接 ...

  5. 2019牛客多校训练第十场F Popping Balloons

    2019牛客多校训练第十场F Popping Balloons 题意:二维平面内给你若干个点,然后你可以在x轴和y轴分别射三枪(每一枪的间隔是R),问最多能射掉多少气球. 题解:贪心.这个应该只能算作 ...

  6. 牛客多校第十场F-Popping Balloons

    题目连接 牛客多校F-PoppingBalloons 题意: 用枪打气球,可以横着打三次,竖着打三次,横着打可以把那一行的气球全打下来,竖着打可以把那一列的气球全打下来,但是,每两次相邻的横着打或者竖 ...

  7. python字符串去重及排序 牛客_2018牛客多校第一场 D.Two Graphs

    题意: n个点,m1条边的图E1,n个点,m2条边的图E2.求图E2有多少子图跟图E1同构. 题解: 用STL的全排列函数next_permutation()枚举映射.对于每一种映射枚举每一条边判断合 ...

  8. 2020 牛客多校第一场

    2020 牛客多校第一场 A. B-Suffix Array 后缀数组的思想:倍增+桶排序的方式找出一串连续序列后缀的大小.虽说正常使用的时候都是字典序,但是只要修改排序方式,也能够达到一个类似的&q ...

  9. 2019牛客多校第一场

    2019牛客多校第一场 题号 题目 知识点 A Monotonic Matrix B Symmetric Matrix C Fluorescent 2 D Two Graphs E Removal F ...

最新文章

  1. 问题 “cell 出栈 selectBox 已选的图标,被释放掉,再次进入屏幕时,没有了已选图标 ” 解决方案...
  2. 文本分类从入门到精通
  3. linux lib64被改名,问题解决:Centos误将/lib64更改为lib64.bak
  4. jmeter测试java_使用JMeter测试Java项目
  5. HDU - 6203 ping ping ping(LCA+dfs序+线段树)
  6. Windbg在Managed App中设置函数断点的几种方法
  7. mfc 弹簧_弹簧和线程:事务
  8. python读取单元格部分内容_Python提取表格一定区域的内容
  9. c语言解数独算法递归,How to think:递归和数独试探算法
  10. Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十五)
  11. 4.4系统,拍照-裁剪,resultCode返回0
  12. Java 队列 Queue 使用说明
  13. PHP PDO的简单使用(query(),exec(),prepare(),Transaction,行锁)
  14. 用C 程序理解汉字的机内码表示
  15. android gms包
  16. VS+Qt应用开发-设置软件图标
  17. cdn搭建原理_CDN运行过程四大要点,附技术原理图解,智能DNS解析
  18. Linux——系统磁盘管理与文件系统
  19. Windows xp .iso下载大全——超全面超难找的收藏版(一)
  20. 奇怪的报错(uncaught typeerror illegal invocation)

热门文章

  1. Erlang --- 基本概念
  2. 【UVA11324】The Largest Clique (SCC)
  3. bzoj:3110: [Zjoi2013]K大数查询
  4. LPC2132的IOPIN
  5. 用户控件中使用相对路径问题
  6. Day 1 用户交互
  7. MongoDB API实现增删改查
  8. 3D Object Classification With Point Convolution —— 点云卷积网络
  9. Coprime Conundrum 容斥原理
  10. 毕业设计今日总结(一)