CF1012B Chemical table】的更多相关文章

$CF1012B Chemical table 给你一个 \(n\times m\) 的矩形,一开始有 \(q\) 个格子上被标记.对于任意两行两列,如果交汇的四个格子中有三个被标记,那么第 \(4\) 个会被自动标记.问你至少需要手动标记几个格子,使得整个矩形内的格子都被标记. \(n,\ m,\ q\leq2\times10^5\) 并查集,构造 把元素 \((x,\ y)\) 看做二分图的一条边 \((x,\ n+y)\) 目标是将它变成完全二分图 而标记其他点的条件 \((x_1,\ y…
有意思的网格图转化.CF Div.1 还是挺有难度的. 注:由于本题有较完美的中文题面,所以不贴英文题面. 英文题面 题目描述 Innopolis 大学的教授正努力研究元素周期表.他们知道,有 \(n \times m\) 种元素,形成了一个 \(n\) 行 \(m\) 列的矩阵. 研究表明,如果元素周期表上有一个元素 A,且元素 B 与它在同一列(A 与 B 不能在同一周期),元素 C 在同一周期(A 与 C 不能在同一列),那么,科学家就可以用这三种元素通过核聚变合成第四种元素 D 的样品,…
[Luogu-CF1012B] 还有重题 P5089[eJOI2018]元素周期表 题解原话 : 可以发现这个过程是不改变二分图中的连通分量的个数的 答案就是 连通分量数-1 证明 : 设一行或一列为一个点,每一个单独的行或列都可以通过一次操作搞满 #include<bits/stdc++.h> int n,m,q,x,y,S; int v[400001]; int h[400001],nxt[400001],to[400001],tot; inline void ins(int x,int…
我们可以将横坐标和纵坐标看成是点.发现这些点之间是有传递性的. 题中说明,如果有矩阵中三个顶点被选,则底角的点也会被覆盖,发现这些点之间是有传递性的.那么我们最终达到的目的就是使整个图中只有 111 个集合.而将两个集合合并的代价是新覆盖一个点.于是我们只需统计初始局面中图中有多少个集合,并输出集合数量 - 1 即可. Code: #include<cstdio> #include<iostream> using namespace std; const int maxn = 20…
给定的一个n*m的区域内,给出一些点的坐标,这些点上有一个元素,如果在矩形的子矩形的三个点都有元素,那么第四个点的元素可以自己产生,其他的元素需要购买,问最少需要购买多少中元素才可以把这个区域给填满. 对于给出点的,先用并查集把x轴上和y轴上有联系的点都联系起来,并且可以顺便把出现过的x和y的数值标记起来. 如果我把所有的点分成了n块,那么的需要添加n-1个元素来把这n块连接起来.对于没有出现的x和y的数值,我需要额外买一个元素来填充这个点. 因为我已经在一个块内的点一定是有联系的,而另一个块的…
题意: 一个棋盘 对于任何一个棋盘中的矩形 如果 任意三角存在棋子 则第四个角会自动生成一个棋子  求铺满整个棋盘 我们至少要向棋盘里加多少枚棋子 解析: 这题就是求图中有多少个连通图,可以直接dfs  也可以 并查集 为什么是求多少个连通图呢 并查集: #include <bits/stdc++.h> #define mem(a, b) memset(a, b, sizeof(a)) #define rap(i, a, n) for(int i=a; i<=n; i++) #defin…
题目传送门:洛谷P5089. 题意简述: 一张 \(n \times m\) 的表格,有一些格子有标记,另外一些格子没有标记. 如果 \((r_1,c_1),(r_1,c_2),(r_2,c_1)\) (满足 \(r_1\ne r_2,c_1\ne c_2\))都有标记,那么可以不花费任何代价使得 \((r_2,c_2)\) 也有标记. 你也可以花费 \(1\) 的代价使得任意一个格子有标记. 问使得所有格子都有标记的最小花费 题解: 比赛时这题我想了很久,猜了一个奇怪的结论交上去就对了. 这里…
首先我们如果满足三缺一,那么必有同行和同列的点 如果两行有同列的数,我们可以设想,他们最后会全部填充成为两者啥都有的情况 显然这个是个并查集 现在我们有了很多集合,每个集合自己可以进行三缺一操作,但是集合有缺陷,集合里面的人都没有的列数,那就没法搞 可以贪心的想,一共k个集合的话,把k个集合连接起来需要k-1个新点,如果还有列没有,那就需要这些列需要新店 除此之外,一开始没有讨论有些行压根没有点,这些行也需要点去开辟疆土 综上所述,一开始论述的时候将行和列交换也是合理的 人总喜欢在伤心,劳累,挫…
<题目链接> 题目大意:给定一个n*m的矩阵网格,向其中加点,对于一个组成矩形的四个点中如果有三个点中有元素,那么第四个点中会自动产生新的元素.问你最少再加多少个点能够填满这个网格.解题分析:不是很好想,先将行列看成两个集合,每次加点操作,就相当于x集合向y集合连了一条边.本题可以巧妙的转化为,要使x和y集合所有的点都连通最少需要添加几条边.初始情况需要n+m-1条边(因为两个集合有n+m个点,且相同集合不能连边).然后根据题目已经给出的边判断最终的连通块个数,用并查集来判连通.主要是这个转化…
题目链接:http://codeforces.com/contest/1013/problem/D 题目大意: 给出一个 \(n \times m\) 的表格,表格上有一些初始点.若有这样的三个点:\((r_1, c_1), (r_1, c_2), (r_2, c_1)\),则由这三个点能生成出点 \((r_2, c_2)\).现问在初始点的基础上最少添加多少个点,能使得初始点和添加的点及它们生成出来的点能填满整个表格. 知识点: 并查集 解题思路: 可以将每一个点看成是将所在的行和列联系起来.…